// 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
应该读取并包含换行符。它读取并成功打印“你好”。但是,这个过程并没有结束。我已经关闭了父管道的写端。所以它应该返回0或EOF
,并且while循环应该退出。
我尝试过使用和不使用换行符和null终止符的“hello”的不同组合。我真的不明白这是什么问题。
答案 0 :(得分:0)
要让fd[0]
到达EOF
,您需要在知道它们的所有流程中关闭fd[1]
。
在您的情况下,您应该在fd[1]
fork()
if (fork() == 0)
{
close(fd[1]);
// ...
// instructions for child process
exit 0;
}