簡體   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