gpt4 book ai didi

c - fgets() : Ok by console, 管道错误

转载 作者:IT王子 更新时间:2023-10-29 00:50:08 26 4
gpt4 key购买 nike

执行下面的C代码

#include <stdio.h>
int main(int argc, char **argv) {
char stdinput[10];
while (1) {
fgets(stdinput, 10, stdin);
fputs(stdinput, stdout);
}
}

产生:

通过控制台:

./a.out
input
input

然后等待更多输入。也就是说,它将 stdin 回显到 stdout,类似于 cat

通过管道:

echo input | ./a.out
input
input
input
[...]

启动后,它会自动淹没控制台,无需交互。

这个示例程序正是我用于测试的;这不是削减。我希望这两个测试的行为方式相同。发生了什么事?

最佳答案

一旦到达EOFfgets 立即返回 NULL,无需等待输入(或修改缓冲区)。因此,它将无限循环。在您的管道案例中,echo 将在写入 "input\n" 后关闭管道,从而导致 EOF。

将您的 fgets 调用更改为

if(fgets(stdinput, 10, stdin) == NULL)
break;

关于c - fgets() : Ok by console, 管道错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12527027/

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