我试图使用stdinselect中读取数据,然后通过套接字将数据发送到服务器。
下面的代码片段应该遵循上述逻辑;但是它没有从stdin中读取任何内容。
此外,它在用户第一次输入字符串后打印Enter command:。行printf("%d %s\n",__LINE__ ,buf);也不会打印任何内容。

fd_set rfds;
struct timeval tv;
int retval;
char buf[BUFLEN];
while(1) {
    FD_ZERO(&rfds);
    FD_SET(STDIN_FILENO, &rfds);
    tv.tv_sec = 5;
    tv.tv_usec = 0;
    retval = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv);
    if (FD_ISSET(STDIN_FILENO, &rfds)) {
        if (fgets(buf,BUFLEN, stdin)) {
              printf("%d %s\n",__LINE__ ,buf);
          if (strncmp(buf, "exit", 4) == 0)
                exit(0);
         }
         printf("\nEnter command: ");
    }
}

为什么我只能无休止地打印?
编辑:问题出在我正在使用的嵌入式设备上,不知怎么用Enter command:编译它解决了这个问题。

最佳答案

尝试

FD_ZERO(&rfds);
FD_SET(STDIN_FILENO, &rfds);

在while循环内

关于c - 如何使用select从stdin读取输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16510831/

10-13 07:27