我想知道
nfds
的作用是什么,在阅读了不同的手册后,我最终得到的唯一答案是 它是编号最高的文件描述符加一。它到底是用来做什么的?
select()
时,您正在尝试检查一组文件描述符的状态。您感兴趣的文件描述符的可能范围从低值 0(标准输入)到某个最大值(您打开的、您有兴趣检查其状态的最高文件描述符)。您必须告诉 select()
文件描述符列表有多大,因为总数可能非常“庞大”(例如 32767)。在这种情况下,内核需要时间来处理描述符,而且您可能尚未初始化 fd_set
达到该数量的条目。 FD_SETSIZE
也出现在等式中,但有时您可以更改该值。
因此,如果您想监视文件描述符 24-31,请将
nfds
设置为 32,并确保使用 FD_ZERO()
将整个 fd_set
归零,并使用 FD_SET()
设置条目 24-31。还要注意的是,select()
会修改输入参数,所以在FD_ISSET()
返回后你必须使用select()
来测试,并且一般情况下你必须重做fd_set
的初始化(或复制保存的值)在再次致电 select()
之前。