2 つのファイル記述子を監視する方法は知っていますが、4 つまたは 5 つのファイル記述子についてはどうですか?
2つのファイル記述子を使用して行う方法は次のとおりです。
fd_mon = (fd1 > fd2 ? fd1 : fd2) + 1;
select(fd_mon, &readfds, NULL, NULL, NULL);
3 つ以上のファイル記述子を監視するにはどうすればよいですか?
マクロを使用して、FD_SET
渡すセットにファイル記述子を追加しますselect
。その仲間も必要FD_ZERO
です。上記の場合、各ファイル記述子と同じセットに対して FD_SET を呼び出し続けるだけです。FD_ISSET
FD_CLR
Google - 「man select」には、例もあります! あなたが *NIX にどれほど精通しているかはわかりませんが、man
(manual の略) は O/S に組み込まれているヘルプ システムです。システムコールに関するこれらの質問に頻繁に答えます。一部のディストリビューションではインストールする必要がある場合があります。たとえば、Ubuntu にはすべての開発マニュアル ページがデフォルトでインストールされているとは思いません。
各記述子を開いた後にテストすることができます。
max_fd = 0;
fd = open(...);
if (fd > max_fd) {
max_fd = fd;
}
....
select(max_fd+1, &readfds, NULL, NULL, NULL);
(fd1 < fd2 ? fd1 : fd2) < fd3 ? (fd1 < fd2 ? fd1 : fd2) : fd3;
それはあなたが変数と同じくらい多くのためにそれを作ることができる3つの変数のためです
記述子を配列に貼り付けることができます。
for(i = maxfd = 0; i < nfds; i++) {
if(maxfd < fd[i]) maxfd = fd[i];
FD_SET(...);
}
select(maxfd+1, ...);