gpt4 book ai didi

将标准输入复制到缓冲区

转载 作者:可可西里 更新时间:2023-11-01 02:54:39 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com