一尘不染

在C中将stdin与select()一起使用

linux

我有以下程序:

 #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”就继续打印…为什么在循环检查哪一个描述符已输入的同时,它一次又不打印一次?

谢谢。


阅读 371

收藏
2020-06-07

共1个答案

一尘不染

select功能仅在有可用输入时告诉您。如果您实际上并没有消耗它,那么select将继续直接下降。

2020-06-07