当select()系统调用中的nfds = 0时会发生什么

Ari*_*ing 2 c linux

我正在Linux上调试应用程序。它具有几个线程,这些线程会定期调用select系统调用:

strace 显示:

select(0, NULL, NULL, NULL, {1, 342414})
Run Code Online (Sandbox Code Playgroud)

所以nfds=0。我以为nfds是出现在任何集合中的最高文件描述符号readfdswritefdsexceptfds增加一个。它不能是标准输入(fd=0),因为这样会有nfds=1

那么nfds=0在这种情况下是什么意思呢?

谢谢!

Use*_*ess 5

通常select休眠,直到超时到期或一个文件描述符之一发生事件。如果没有文件描述符,超时是仅存的行为。

我在本地的联机帮助页select(2)甚至还包含文字

某些代码调用select(),将所有三个集合都设置为空,nfds设置为零,并且设置非NULL超时,这是一种可移植的,以亚秒级精度进行睡眠的方法。