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