0

select を使用して複数のチケットを監視する単純なサーバーを作成しています。

これが私のコードです:

while (1) { /* Main server loop - forever */
    build_select_list();
    timeout.tv_sec = 1;
    timeout.tv_usec = 0;

    readsocks = select(maxSock+1, &socks, (fd_set *) 0, (fd_set *) 0, &timeout);

    if (readsocks < 0) {
        perror("select");
        exit(EXIT_FAILURE);
    }
    if (readsocks == 0) {
        printf(".");
        fflush(stdout);
    } else
        read_socks();
}

selectが監視しているソケットの変更を検出し、それについて「報告」することを知っています。select を使用して、ユーザーからのキーボード入力 (exit などのコマンド) を検出できますか? そうでない場合、どうすればよいですか?

4

1 に答える 1

2

STDIN_FILENO(unistd.hから)または(stdio.hから)を使用しfileno(stdin)て、コンソール入力のファイル記述子を取得できます。これを「読み取り」fdsetに追加すると、「select正しいことを実行」し、コンソール入力がいつ利用可能になるかを示します。そこから、他のファイル記述子と同じようにそこから読み取ります。

于 2012-06-13T18:46:05.773 に答える