选择()监视3个或更多文件描述符

时间:2012-11-07 19:01:58

标签: c linux

我知道如何监控两个文件描述符但是4个或5个文件描述符怎么样?

以下是我使用2个文件描述符的方法。

fd_mon = (fd1 > fd2 ? fd1 : fd2) + 1;

select(fd_mon, &readfds, NULL, NULL, NULL);

如何监控3个或更多文件描述符?

4 个答案:

答案 0 :(得分:2)

使用FD_SET宏将文件描述符添加到您传递给select的集合中。你也需要好友FD_ZEROFD_ISSETFD_CLR。在上面的例子中,只需为每个文件描述符和相同的集合调用FD_SET。

Google - “man select”,它甚至有一个例子!我不知道你对* NIX有多熟悉,但man(手册的简称)是内置于操作系统的帮助系统。它会经常回答有关系统调用的这些问题。您可能必须在某些发行版中安装它,例如,我不认为Ubuntu默认安装了所有开发人员页面。

答案 1 :(得分:1)

您可以在打开每个描述符后进行测试:

max_fd = 0;

fd = open(...);
if (fd > max_fd) {
  max_fd = fd;
}
....
select(max_fd+1, &readfds, NULL, NULL, NULL);

答案 2 :(得分:0)

(fd1 < fd2 ? fd1 : fd2) < fd3 ? (fd1 < fd2 ? fd1 : fd2) : fd3;

对于3个变量,你可以使用变量

答案 3 :(得分:0)

您可以将描述符粘贴在数组中:

for(i = maxfd = 0; i < nfds; i++) {
     if(maxfd < fd[i]) maxfd = fd[i];
     FD_SET(...);
 }
 select(maxfd+1, ...);