[英]Break a while loop that reads from fifo channel
考虑到一件重要的事情,我必须在UNIX中的C程序中模拟shell行为:父进程接收所有命令并将它们发送给子进程。 然后,孩子执行接收到的命令,然后将输出发送给父亲。 我的想法是我从父级和主要子级fork()那里收到命令,以便他自己的子级可以执行该命令并将输出发送到fifo管道。 问题是我无法打破while循环(打印正确的输出):
mkfifo("output",S_IFIFO|0644);
while(read(fifod2,&c,1))
printf("%c",c);
我意识到fifo的大小是可变的,但是第二个子项在终止时必须发送了EOF,以便在读取达到该值时返回0。但这似乎没有发生。 如果需要,请询问我更多的代码部分。 谢谢
由于父对象使用O_RDWR
打开了fifo的末尾,因此始终有一个向fifo写入文件描述符的进程。 EOF仅在fifo没有可写fds时发生,因此,由于父进程将这种可写fd保持打开状态,因此永远不会获得EOF。
尝试用父O_RDONLY
中的O_RDONLY
打开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.