【发布时间】:2013-12-04 03:51:28
【问题描述】:
处理网络项目并使用 select() 和 FD_ISSET 同时观察标准输入和 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 返回。
【问题讨论】:
-
尝试将
bytes写入stderr。 -
你在打
break吗? -
@woolstar 我将 fwrite 行更改为
fwrite(buffer, sizeof(char, ytes, stderr);- 仍然没有输出 -
@BitFiddlingCodeMonkey 我在
break之前添加了一个输出行。我似乎没有到这里。 -
打印
bytes:fprintf(stderr, "bytes read = %zu", bytes);。如果答案是 0,那么您就知道为什么什么都看不到了。