繁体   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