我知道如何监控两个文件描述符但是4个或5个文件描述符怎么样?
以下是我使用2个文件描述符的方法。
fd_mon = (fd1 > fd2 ? fd1 : fd2) + 1;
select(fd_mon, &readfds, NULL, NULL, NULL);
如何监控3个或更多文件描述符?
答案 0 :(得分:2)
使用FD_SET
宏将文件描述符添加到您传递给select
的集合中。你也需要好友FD_ZERO
,FD_ISSET
和FD_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, ...);