如何停止从FIFO文件读取fgets

时间:2016-01-11 04:22:27

标签: c linux process fifo

我有两个进程,首先从stdin读取并写入FIFO文件,第二个是从FIFO文件中等待消息。

我正在使用这个程序结构:

while(run)
{
  fgets(string, sizeof(string), fp);
}

当sentinel(run)更改为0以停止进程时,它并没有真正停止,因为它卡在fgets()函数中。 我该如何解决?

我希望程序在sentinel更改为0时等待消息,然后立即停止程序。

1 个答案:

答案 0 :(得分:0)

我认为你的fifo是在阻止模式中打开的,所以在fgets()中,如果数据不可用,那么呼叫将被阻止,直到fifo有一些新数据。

通过在公开呼叫中使用O_NONBLOCK来避免在非阻塞模式下打开FIFO。

在这里阅读更多内容。 http://www.tldp.org/LDP/lpg/node19.html

这种方式如果没有数据可用fgets返回错误而不是卡住该调用。在下一次循环检查时,run将为0,因此它从此循环中出来。