打破从fifo通道读取的while循环

时间:2012-10-21 12:12:42

标签: c unix while-loop fifo

我必须在UNIX中模拟C程序中的shell行为,记住一件重要的事情:父进程接收所有命令并将它们发送给子进程。然后,孩子执行收到的命令,然后将输出发送给父亲。 我的想法是,我从父级和我的主子fork()接收命令,以便他自己的孩子可以执行命令并将输出发送到fifo管道。问题是我无法打破while循环(打印正确的输出):

mkfifo("output",S_IFIFO|0644);
while(read(fifod2,&c,1))
      printf("%c",c);

我意识到fifo的大小是可变的,但第二个孩子必须在终止时发送EOF,这样当读取到达它时,返回0.但这似乎不会发生。 如果需要,请向我询问更多代码部分。 谢谢

1 个答案:

答案 0 :(得分:0)

因为父级使用O_RDWR打开了fifo的末尾,所以始终有一个向fifo写入可写文件描述符的进程。 EOF仅在fifo没有可写fds时发生,因此父进程保持这样一个可写的fd打开,它永远不会得到EOF。

请尝试在父母中使用O_RDONLY打开。

相关问题