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时发生的事情。
答案 0 :(得分:6)
可以使用select作为sleep
的替代方案。我相信它是通过将所有参数specyfying为0 / NULL来实现的,除了超时。咨询
答案 1 :(得分:5)
此man page表示
有些代码调用select(),其中所有三个集都为空,nfds为零,非NULL超时作为一种相当便携的方式以亚秒级精度进行休眠。
答案 2 :(得分:3)
等待给定的超时,然后返回0,或者使用EINTR
更快返回。如果你考虑一下,这是完全合理的,事实上是文档所说的,即使它没有明确说明。如果所有集合都为NULL或者没有设置小于nfds
的位,则会发生同样的事情。