我想知道 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()
进行测试,并且通常在再次调用 select()
之前,您必须重做 fd_set
的初始化(或复制保存的值)。
关于c - select() 中的 nfds 用于什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695678/