将stdin复制到缓冲区

时间:2013-12-04 03:51:29

标签: c tcp stdin

使用网络项目并使用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返回。

1 个答案:

答案 0 :(得分:0)

我将fread行切换为

size_t bytes = read(0, buffer, BUFFSIZE)

这超出了fread没有返回的问题。不幸的是,这似乎也拿起了回车符,这给了我一个额外的字节,在我需要删除的缓冲区末尾。例如,如果我输入'aa'然后输出bytes,则显示3而不是2.现在我需要弄清楚如何解决这个问题。

非常欢迎任何更好的答案。谢谢大家。