C:轮询功能限制

时间:2011-04-10 04:48:45

标签: c function limits

当我使用轮询功能并将数量设置为1000以上时,它根本不会休眠。这可能是什么想法。 opengroup没有提到任何限制,我也不会耗尽我的记忆空间。但是当我检查指针时,整数是负数。这可能是什么想法?

2 个答案:

答案 0 :(得分:1)

如果poll()返回负数,则应使用perror("poll");来显示原因。

如果原因是“参数无效”,可能是出于这个原因(来自the Linux poll() man page):

  

EINVAL

     

nfds 值超过了   RLIMIT_NOFILE值。

顺便说一下,POSIX规范也将此列为错误:

  

如果出现以下情况,poll()函数将失败:   ...... [EINVAL]       nfds参数大于{OPEN_MAX}

答案 1 :(得分:1)

我的猜测是你的文件描述符限制设置为1024.你可以通过在 bash (unix)中运行ulimit -n来看到这一点。对于Windows,请参阅http://support.microsoft.com/kb/111855。如果您正在运行linux,可以通过修改/etc/limits.conf(或/etc/security/limits.conf或类似的)来增加该限制,如:

*               soft    nofile  10240
*               hard    nofile  10240

请注意,更改限制后,您必须注销并重新登录才能获得新值。