2

2 つのファイル記述子を監視する方法は知っていますが、4 つまたは 5 つのファイル記述子についてはどうですか?

2つのファイル記述子を使用して行う方法は次のとおりです。

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

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

3 つ以上のファイル記述子を監視するにはどうすればよいですか?

4

4 に答える 4

2

マクロを使用して、FD_SET渡すセットにファイル記述子を追加しますselect。その仲間も必要FD_ZEROです。上記の場合、各ファイル記述子と同じセットに対して FD_SET を呼び出し続けるだけです。FD_ISSETFD_CLR

Google - 「man select」には、例もあります! あなたが *NIX にどれほど精通しているかはわかりませんが、man(manual の略) は O/S に組み込まれているヘルプ システムです。システムコールに関するこれらの質問に頻繁に答えます。一部のディストリビューションではインストールする必要がある場合があります。たとえば、Ubuntu にはすべての開発マニュアル ページがデフォルトでインストールされているとは思いません。

于 2012-11-07T19:12:46.370 に答える
1

各記述子を開いた後にテストすることができます。

max_fd = 0;

fd = open(...);
if (fd > max_fd) {
  max_fd = fd;
}
....
select(max_fd+1, &readfds, NULL, NULL, NULL);
于 2012-11-07T19:14:41.897 に答える
0

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

それはあなたが変数と同じくらい多くのためにそれを作ることができる3つの変数のためです

于 2012-11-07T19:15:56.983 に答える
0

記述子を配列に貼り付けることができます。

for(i = maxfd = 0; i < nfds; i++) {
     if(maxfd < fd[i]) maxfd = fd[i];
     FD_SET(...);
 }
 select(maxfd+1, ...);
于 2012-11-07T21:41:52.150 に答える