我搜查了無法找到,所以我終於來求助了。 我的任務涉及(在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'來確定你是否有文件結尾或錯誤。 –