为什么我的 while(read) 管道循环永远不会结束?

Why does my while(read) loop with pipes never end?

// Some initialization

// Child process
// stdin is redirected to fd[0]
while (fgets(someCharArray, sizeof(someCharArray), stdin) {
    printf("%s\n", someCharArray);
}

// Parent process
char greeting[50] = "hello\n[=10=]";
write(fd[1], greeting, sizeof(greeting));
close(fd[1]);

我真的被这些管道弄糊涂了。 fgets 应该阅读并包括换行符。它读取并成功打印 "hello"。然而,这个过程并没有结束。我已经关闭了父级管道的写入端。所以它应该 return 0 或 EOF,并且 while 循环应该退出。

我尝试了 "hello" 的不同组合,有和没有换行符和空终止符。实在是看不出问题所在

为了让 fd[0] 达到 EOF,您需要在所有知道它们的进程中关闭 fd[1]。 在您的情况下,您应该在 fork()

之后立即关闭子进程中的 fd[1]
if (fork() == 0)
{
    close(fd[1]);
    // ...
    // instructions for child process
    exit 0;
}