【发布时间】:2012-11-07 22:53:56
【问题描述】:
我找了又找都无济于事,所以我终于来寻求帮助。 我的任务涉及(在 RedHat Linux 上运行的 C 语言中)创建两个子进程,每个子进程将任意数量的迭代写入管道的字符。该管道与创建它们的父进程共享。父级从管道读取,而子级仍然有要写入的字符。一旦孩子退出并且管道为空,则父母(主)可以终止。
这是我编写的代码逻辑的一个快速而肮脏的示例。
main()
{
//create pipe
fork(); //childA
//writes to pipe
fork(); //childB
//writes to pipe
//parent reading
while(condition) {
//read from pipe + print chars to terminal
}
}
现在,我的问题是关于 while 循环的条件。 当孩子们因管道满而无法写作时,我需要阅读,但我无法弄清楚什么类型的条件可以让我这样做。任何帮助将是绝对惊人的。
【问题讨论】:
-
您应该始终阅读:这是摆脱“满管”状态的唯一方法。一旦最后一个孩子关闭管道,读取将返回 -1。
-
@wildplasser
read在文件结束时返回 0,在错误时返回 -1;所以当最后一个孩子关闭管道并且没有数据可供读取时,它将返回 0。fread返回的值小于您请求的对象数(或 0),您需要使用feof和ferror来确定您是否有文件结尾或错误。