我正在Linux上调试应用程序。它具有几个线程,这些线程会定期调用select系统调用:
strace 显示:
select(0, NULL, NULL, NULL, {1, 342414})
Run Code Online (Sandbox Code Playgroud)
所以nfds=0。我以为nfds是出现在任何集合中的最高文件描述符号readfds,writefds并exceptfds增加一个。它不能是标准输入(fd=0),因为这样会有nfds=1。
那么nfds=0在这种情况下是什么意思呢?
谢谢!
通常select休眠,直到超时到期或一个文件描述符之一发生事件。如果是没有文件描述符,超时是仅存的行为。
我在本地的联机帮助页select(2)甚至还包含文字
某些代码调用select(),将所有三个集合都设置为空,nfds设置为零,并且设置非NULL超时,这是一种可移植的,以亚秒级精度进行睡眠的方法。