我正在阅读一个串行程序,我观察到他们在使用
例子:
r=select(fd+1, &fds, NULL, NULL, &timeout);
其中fds已经具有fd的值。
read()
之前使用select()
。为什么这是必须的?为什么我们不能直接调用read()
并检查它是否失败?另外,为什么我们必须将文件描述符增加1并传递,而我已经将文件描述符集合传递给了select()
?例子:
r=select(fd+1, &fds, NULL, NULL, &timeout);
其中fds已经具有fd的值。
read(2)
可能会阻塞。此外,了解poll(2)
系统调用(它比select(2)
更适合多路复用;请阅读有关 C10K 问题 的更多信息)。 - Basile Starynkevitchpoll
更加C10K友好,因为能够在超过1024个文件描述符上进行多路复用)。 - Basile Starynkevitch