Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将stdin复制到缓冲区_C_Tcp_Stdin - Fatal编程技术网

C 将stdin复制到缓冲区

C 将stdin复制到缓冲区,c,tcp,stdin,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, sizeo

在网络项目中工作,并使用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);
}

然后输入类似于
aa
的内容,我可以强制它输出,但这太小了。当读取回车键时,我需要一种方法使其从fread返回。

我将
fread
行切换为

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


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

尝试将
字节写入stderr。您是否点击了
中断
?@woolstar我将fwrite行更改为
fwrite(缓冲区,大小(字符,字节,stderr);
-仍然没有output@BitFiddlingCodeMonkey我在
中断
之前添加了一行输出。似乎我没有到达这里。打印
字节
fprintf(stderr,“字节读取=%zu”,字节)如果答案是0,你就知道为什么什么都看不到。几乎所有形式的
fread
read
都会给你换行符。只需修剪缓冲区的结尾。类似于
buffer[bytes-->='\0'
size_t bytes = read(0, buffer, BUFFSIZE)