select()用于的nfds是什么?

我想知道nfds做了什么,在阅读了不同的手册之后,我最终得到的唯一答案是它是编号最高的文件描述符加一 。 它究竟用于什么?

当您使用select() ,您正在尝试检查一组文件描述符的状态。 您感兴趣的文件描述符的可能范围从低0(标准输入)到某个最大值(您打开的最高文件描述符,您有兴趣检查其状态)。 你必须告诉select()文件描述符列表有多大,因为总数可以是“巨大的”(例如32767)。 在这种情况下,内核处理描述符需要一些时间,而且您可能没有将fd_set初始化为该数量的条目。 FD_SETSIZE也在等式中计算,但有时您可以更改该值。

因此,如果要监视文件描述符24-31,则将nfds设置为32,并确保使用FD_ZERO()将整个fd_setFD_SET()设置为零以设置条目24-31。 另请注意, select()修改输入参数,因此必须在select()返回后使用FD_ISSET()进行测试,通常在调用之前必须重做fd_set的初始化(或复制保存的值)再次select()