select()用于的nfds是什么?

Abd*_*SSI 24 c select

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

Jon*_*ler 18

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

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

  • Downvoted:即使答案(大多数)是正确的,它也会错过关键细节,并且措辞不可理解.请参阅http://unix.stackexchange.com/questions/7742/whats-the-purpose-of-the-first-argument-to-select-system-call. (5认同)
  • 当我想监视fd数字`24`到`31`时,我会以`nfds`(*文件描述符数*)为名。为什么是32位?(我知道您是对的,手册页也说了这一点,但我想知道为什么) (2认同)