我有两个进程,第一个是从标准输入读取并写入 FIFO 文件,第二个是等待来自 FIFO 文件的消息。
我正在使用这个程序结构:
while(run)
{
fgets(string, sizeof(string), fp);
}
当哨兵(运行)变为 0 以停止进程时,它并没有真正停止,因为它停留在 fgets()
函数中。
我该如何解决?
我希望程序在 sentinel 变为 0 时等待消息,然后立即停止程序。
最佳答案
我认为你的 fifo 是在阻塞模式下打开的,所以在 fgets()
中,如果数据不可用,调用将被阻塞,直到 fifo 有一些新数据。
所以通过在 open 调用中使用 O_NONBLOCK
来避免在非阻塞模式下打开 FIFO。
在这里阅读更多。 http://www.tldp.org/LDP/lpg/node19.html
这样,如果没有可用数据,fgets 会返回错误,而不是卡住该调用。在接下来的 while 循环检查中,run
将为 0,因此它从这个循环中出来。
关于c - 如何停止 fgets 从 FIFO 文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34714153/