【问题标题】:Why the select syscall only has a upper limit on the file descriptors and not a lower limit?为什么 select 系统调用只有文件描述符的上限而没有下限?
【发布时间】:2012-04-09 12:42:42
【问题描述】:

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

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

【问题讨论】:

  • 我不确定,但文件描述符往往是小数字,所以也许只是指定下限通常没有多大帮助。
  • 这似乎是最简单的解释。但可能还有更多技术原因。

标签: operating-system system-calls multiplexing


【解决方案1】:

文件描述符编号是每个进程而不是您所说的每个系统。所以它们每次都从零开始,因此有一个下限没有多大用处。

【讨论】:

  • 是的,我昨天澄清了这个概念。
  • 您可以使用dup2 移动它们。所以下限是多余的。
猜你喜欢
  • 2023-03-04
  • 2014-05-08
  • 2017-02-12
  • 2012-10-09
  • 1970-01-01
  • 2018-02-24
  • 2013-05-30
  • 2021-11-29
  • 2019-12-24
相关资源
最近更新 更多