【发布时间】:2012-01-01 21:28:57
【问题描述】:
我想知道nfds 做了什么,在阅读了不同的手册之后,我最终得到的唯一答案是它是编号最高的文件描述符加一。它到底是做什么用的?
【问题讨论】:
我想知道nfds 做了什么,在阅读了不同的手册之后,我最终得到的唯一答案是它是编号最高的文件描述符加一。它到底是做什么用的?
【问题讨论】:
当您使用select() 时,您正在尝试检查一组文件描述符的状态。您感兴趣的文件描述符的可能范围从低值 0(标准输入)到某个最大值(您有兴趣检查其状态的打开的最高文件描述符)。你必须告诉select() 文件描述符列表有多大,因为总数可以是“巨大的”(例如 32767)。在这种情况下,内核处理描述符需要时间,而且您可能没有将fd_set 初始化到该条目数。 FD_SETSIZE 也在等式中,但有时您可以更改该值。
因此,如果您想监视文件描述符 24-31,则将 nfds 设置为 32,并确保使用 FD_ZERO() 将整个 fd_set 和 FD_SET() 设置为零以设置条目 24- 31.还要注意,select() 修改了输入参数,所以你必须在select() 返回后使用FD_ISSET() 进行测试,一般你必须重做fd_set 的初始化(或复制一个保存的值)在再次致电select() 之前。
【讨论】:
nfds(文件描述符数)当我想监视fd编号24到31时,我会期望7。为什么32? (我知道你是对的,手册页也这么说,但我想知道为什么)
select(),这可能会减慢速度。