如何使用select从标准输入读取输入?
问题描述:
我试图从stdin
使用select
读取,之后,我通过套接字发送数据到服务器。如何使用select从标准输入读取输入?
下面的代码片段应该遵循上面的逻辑;但它不会从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循环
+0
谢谢你,即使你是ri,也不能解决问题GHT。编辑我的问题。 – 0x90 2013-05-12 19:55:40
添加'fflush(NULL);'只是'select'之前(以及'FD_ZERO'和'FD_SET' ....)或更好地使用[民意调查(2)](http://man7.org/linux/man-pages/man2/poll.2.html),而不是'选择' – 2013-05-12 18:52:22
你是否按命令后输入? – 2013-05-12 18:53:22
@VaughnCato是... – 0x90 2013-05-12 18:53:44