我有两个进程,首先从stdin读取并写入FIFO文件,第二个是从FIFO文件中等待消息。
我正在使用这个程序结构:
while(run)
{
fgets(string, sizeof(string), fp);
}
当sentinel(run)更改为0以停止进程时,它并没有真正停止,因为它卡在fgets()
函数中。
我该如何解决?
我希望程序在sentinel更改为0时等待消息,然后立即停止程序。
答案 0 :(得分:0)
我认为你的fifo是在阻止模式中打开的,所以在fgets()
中,如果数据不可用,那么呼叫将被阻止,直到fifo有一些新数据。
通过在公开呼叫中使用O_NONBLOCK
来避免在非阻塞模式下打开FIFO。
在这里阅读更多内容。 http://www.tldp.org/LDP/lpg/node19.html
这种方式如果没有数据可用fgets返回错误而不是卡住该调用。在下一次循环检查时,run
将为0,因此它从此循环中出来。