将标准输入复制到缓冲区

标签 c tcp stdin

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

最佳答案

我将 fread 行切换为

size_t bytes = read(0, buffer, BUFFSIZE)

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

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

关于将标准输入复制到缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20366468/

相关文章:

stream - 如何读取 M3 Dart 上的控制台输入

c - 在循环中使用 fgets() 获取输入

html - libxml2 HTML解析

c - 在 linux 环境中使用 C 中的 TCP 的服务器客户端应用程序,

c++ - 使用 libpcap 获取数据包的 uid

linux - 使用 Ncat 将数千行逐一发送到套接字服务器?

c - XGetImage() 中缺少鼠标指针

c++ - 如何在 fedora 17 中使用 TCP_QUICKACK

javascript - 从 Node 产生时ffmpeg缓冲标准输入

c - 在 C 中检测 Ctrl-D