我搜查了无法找到,所以我终于来求助了。 我的任务涉及(在RedHat Linux上运行的C语言中)创建两个子进程,每个子进程都将任意数量的迭代字符写入管道。该管道与创建它们的父进程共享。父母从管道读取,而孩子仍然有字符写入。一旦孩子退出并且管道是空的,父母(主)就可以终止。2个孩子写信给管道,家长从管道中读取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循环的条件。 我需要阅读时,由于一个完整的管道阻止孩子写作,但我无法弄清楚什么样的条件会允许我这样做。任何帮助将是绝对惊人的。
你应该总是阅读:这是摆脱“满管”状态的唯一方法。一旦最后一个孩子关闭管道,read将返回-1。 – wildplasser
@wildplasser'read'在文件结束时返回0,错误时返回-1;所以当最后一个孩子关闭管道并且没有数据需要读取时它将返回0。 'fread'返回一个小于你请求的对象数(或0)的值,并且你需要使用'feof'和'ferror'来确定你是否有文件结尾或错误。 –