5

私は次のプログラムを持っています:

 #include <stdio.h>
 #define STDIN 0

 int main()
 {

    fd_set fds;
    int maxfd;
    // sd is a UDP socket

    maxfd = (sd > STDIN)?sd:STDIN;

    while(1){

        FD_ZERO(&fds);
        FD_SET(sd, &fds); 
        FD_SET(STDIN, &fds); 

        select(maxfd+1, &fds, NULL, NULL, NULL); 

        if (FD_ISSET(STDIN, &fds)){
              printf("\nUser input - stdin");
        }
        if (FD_ISSET(sd, &fds)){
              // socket code
        }
     }
 }

私が直面している問題は、STDINで入力が検出されると、「User input --stdin」というメッセージが印刷され続けることです...なぜ、どの記述子が入力されているかをループチェックしながら、1回だけ印刷しないのですか?

ありがとう。

4

2 に答える 2

13

このselect関数は、使用可能な入力がある場合にのみ通知します。あなたが実際にそれを消費しないならば、選択はまっすぐに落ち続けます。

于 2012-04-18T23:05:38.223 に答える
3

STDINを読んでいないので、次回はループの周りにまだ読むべきものがあります。

これを防ぐには、STDINを読む必要があります。

于 2012-04-18T23:04:49.170 に答える