【发布时间】:2016-03-19 21:25:01
【问题描述】:
// 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\0";
write(fd[1], greeting, sizeof(greeting));
close(fd[1]);
我真的对这些管道感到困惑。 fgets 应该读到并包括换行符。它读取并成功打印“hello”。然而,这个过程并没有结束。我已经关闭了父管道的写入端。所以它应该返回 0 或 EOF,并且 while 循环应该退出。
我尝试了不同的“hello”组合,有和没有换行符和空终止符。我真的不明白问题是什么。
【问题讨论】:
-
子进程中你也
closefd[1]? -
请显示minimal complete and verifiable example。您可能没有关闭所有正确的 fd。所以我们需要看完整的代码。
-
@jdarthenay 我对此不确定。子进程实际上已经执行了另一个源文件。所以它没有
fd。我曾尝试在 while 循环之前closestdout,但这没有意义。这是否意味着我需要将主程序中的fd传递给子程序? -
@jdarthenay 哦。即使我将孩子的
stdout重定向到fd[1],我也不知道我仍然需要关闭它。谢谢。
标签: c string while-loop pipe fgets