c - 如何使用 select 从 stdin 读取输入?

标签 c linux file-io stdin fgets

我正在尝试使用 selectstdin 读取数据,之后我通过套接字将数据发送到服务器。

以下代码段应该遵循上述逻辑;但它不会从 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:

编辑: 问题出在我使用的嵌入式设备上,并且以某种方式用 -fpic 编译它解决了问题。

最佳答案

尝试

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

在 while 循环中

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

相关文章:

ruby - Ruby 在哪里跟踪其打开的文件描述符?

android - 如何按名称从 res/raw 读取文件

C - 使用 unsigned int 是否只是糟糕的编码实践?

将 png 转换为 sdl 的 c header

c - dup() 后跟来自多个线程或进程的 close()

c++ - SYSV 与 Linux/GNU ELF 格式

java - 尝试在 Java 中使用自定义比较器时出错

c - 通过 C 中的用户定义函数打印随机二维数组

C:错误:不兼容的指针类型,删除&-存储其自身地址的指针

linux - : not a valid identifier bash export says