簡體   English   中英

如何停止fget從FIFO文件讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM