Operating system 为什么select系统调用只有文件描述符的上限而没有下限?

Operating system 为什么select系统调用只有文件描述符的上限而没有下限?,operating-system,system-calls,multiplexing,Operating System,System Calls,Multiplexing,在 syscall,nfds是位图中设置的所有文件描述符中我们感兴趣的最大的文件描述符。我认为这是为了提高效率,这样实现就不必扫描系统中的所有文件描述符。如果是这样的话,那么为什么这个系统调用不允许我们传递一个参数来指定感兴趣的最小文件描述符呢?文件描述符编号是按进程而不是按系统进行的。因此,它们每次都从零开始,因此设置下限没有多大用处 我不确定,但文件描述符往往是小数字,因此可能只是指定下限通常不会有多大帮助。这似乎是最简单的解释。但可能还有更技术性的原因。是的,我昨天澄清了这个概念。你可以用


syscall,
nfds
是位图中设置的所有文件描述符中我们感兴趣的最大的文件描述符。我认为这是为了提高效率,这样实现就不必扫描系统中的所有文件描述符。如果是这样的话,那么为什么这个系统调用不允许我们传递一个参数来指定感兴趣的最小文件描述符呢?

文件描述符编号是按进程而不是按系统进行的。因此,它们每次都从零开始,因此设置下限没有多大用处

我不确定,但文件描述符往往是小数字,因此可能只是指定下限通常不会有多大帮助。这似乎是最简单的解释。但可能还有更技术性的原因。是的,我昨天澄清了这个概念。你可以用
dup2
移动它们。所以下限是多余的。
int select(
          int nfds,
          fd_set *readfds,
          fd_set *writefds,
          fd_set *exceptfds,
          struct timeval *timeout);