我正在尝试使用 select
从 stdin
读取数据,之后我通过套接字将数据发送到服务器。
以下代码段应该遵循上述逻辑;但它不会从 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/