什么"选择"当nfds是0时做什么?

时间:2013-05-27 06:56:17

标签: c linux

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

select的第一个参数nfds应该是最大文件描述符加1,最小值应为1。 但是我看到一些代码设置nfds为0,这种用法合法吗? 另外,当select为否定或EINVAL包含无效值时,nfds的返回值设置为timeout。同样,它没有指定nfds为0时发生的事情。

3 个答案:

答案 0 :(得分:6)

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

Why use select() instead of sleep()?

答案 1 :(得分:5)

man page表示

  

有些代码调用select(),其中所有三个集都为空,nfds为零,非NULL超时作为一种相当便携的方式以亚秒级精度进行休眠。

答案 2 :(得分:3)

等待给定的超时,然后返回0,或者使用EINTR更快返回。如果你考虑一下,这是完全合理的,事实上是文档所说的,即使它没有明确说明。如果所有集合都为NULL或者没有设置小于nfds的位,则会发生同样的事情。