1

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

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

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

4

1 回答 1

0

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

尝试O_RDONLY在父级中打开。

于 2012-10-21T12:15:30.963 回答