c - 如何停止 fgets 从 FIFO 文件中读取

标签 c linux process fifo

我有两个进程,第一个是从标准输入读取并写入 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/

相关文章:

c - Gtk+ 和串行输入 (UART)

c - 命名共享内存 Windows api c++

linux - 将 Linux 命令的屏幕输出 (stdErr) 和输出 (stdOut) 写入分隔文件

groovy - java.io.IOException : Stream closed (from groovy)

c - Kill() 错误 : no such process?

c - 将自定义 Makefile 与 Eclipse/CDT 结合使用

c - 对数组使用动态内存分配

android - 连接的设备未出现在 AVD 管理器中 (linux)

linux - 为什么 Perl 在与 find 一起使用时会删除文件内容?

运行脚本后 pythonw.exe 进程不退出