2012-03-25 44 views
0

为什么选择系统调用只有文件描述符的上限而不是下限?

int select(
      int nfds, 
      fd_set *readfds, 
      fd_set *writefds, 
      fd_set *exceptfds, 
      struct timeval *timeout); 

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

+0

我不确定,但文件描述符往往是小数字,所以也许只是指定下限通常没有多大帮助。 – 2012-03-25 23:15:18

+0

这似乎是最简单的解释。但可能有更多的技术原因。 – euphoria83 2012-03-25 23:33:06

回答

1

如您所说,文件描述符编号不是每个系统的每个进程。因此,他们每次都从零开始,因此没有太多的用途来设定下限。

+0

是的,我昨天澄清了这个概念。 – euphoria83 2012-04-01 00:14:18

+0

你可以用'dup2'移动它们。所以下限是多余的。 – 2015-08-25 19:34:55