[英]How to stop fgets reading from FIFO file
我有兩個過程,第一個過程是從stdin讀取並寫入FIFO文件,第二個過程是等待FIFO文件中的消息。
我正在使用此程序結構:
while(run)
{
fgets(string, sizeof(string), fp);
}
當哨兵(運行)更改為0以停止進程時,它並沒有真正停止,因為它卡在了fgets()
函數中。 我該如何解決?
我希望程序在前哨更改為0時等待消息,然后立即停止程序。
我認為您的fifo是在“ 阻止”模式下打開的,因此,在fgets()
中,如果沒有可用數據,則在read調用中調用將被阻止,直到fifo有一些新數據為止。
SO通過在打開調用中使用O_NONBLOCK
來避免在非阻塞模式下打開此FIFO。
在這里閱讀更多。 http://www.tldp.org/LDP/lpg/node19.html
這樣,如果沒有可用數據,則fgets將返回錯誤,而不是阻塞該調用。 在下一個while循環檢查中, run
將為0,因此它將從此循環中出來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.