繁体   English   中英

中断从FIFO频道读取的while循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM