使用网络项目并使用select()和FD_ISSET同时监视stdin和TCP连接。我似乎无法捕获缓冲区中的键盘输入,以便我可以处理它。这就是我所拥有的:
if (FD_ISSET(0, &read_set)) {
fprintf(stdout, "Keyboard input noted:\n");
size_t bytes = fread(buffer, sizeof(char), BUFFSIZE, stdin);
fwrite(buffer, sizeof(char), bytes, stdout);
fflush(stdout);
if (bytes < BUFFSIZE)
if (feof(stdin))
break;
fprintf(stdout, "buffer: %s\n", buffer);
}
第一个printf语句在我按下回车键时输出,但第二个从不触发。有人能告诉我我错过了什么吗?谢谢!
编辑:我将size_t bytes = fread(buffer, sizeof(char), BUFFSIZE, stdin);
更改为
size_t bytes = fread(buffer, sizeof(char), 2*sizeof(char), stdin);
然后键入类似aa<enter>
的内容我可以强制它输出,但这太小了。我需要一种方法来在读取回车键时从fread返回。
答案 0 :(得分:0)
我将fread
行切换为
size_t bytes = read(0, buffer, BUFFSIZE)
这超出了fread
没有返回的问题。不幸的是,这似乎也拿起了回车符,这给了我一个额外的字节,在我需要删除的缓冲区末尾。例如,如果我输入'aa'然后输出bytes
,则显示3而不是2.现在我需要弄清楚如何解决这个问题。
非常欢迎任何更好的答案。谢谢大家。