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

select, ,的第一个参数nfds应该是最大文件描述符加1,应该至少是1。
但是我看到有些代码设置nfds为0,这样使用合法吗?
另外,返回值select设置为EINVALwhennfds为负数或timeout包含无效值。同样,它没有指定nfds0 时发生了什么。

4

3 回答 3

7

可以使用 select 作为sleep. 我相信它是通过将所有参数指定为 0/NULL 来实现的,除了超时。咨询

为什么使用 select() 而不是 sleep()?

于 2013-05-27T06:59:10.110 回答
5

这个手册页

一些代码调用 select() 时所有三个集合都为空,nfds 为零,并且非 NULL 超时作为一种相当可移植的亚秒精度睡眠方式。

于 2013-05-27T07:00:43.087 回答
3

它等待给定的超时,然后返回 0,或者它更快地返回EINTR. 如果您考虑一下,这完全有道理,并且实际上是文档所说的,即使它没有明确说明。如果所有集合都为 NULL 或其中没有比nfds集合少的位,也会发生同样的事情。

于 2013-05-27T06:59:33.480 回答