如何使用select从stdin读取输入?
我试图使用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循环中