c - 当数据到达时从 FIFO 读取数据 (linux)

标签 c linux ipc pipe fifo

我有两个用 C 编写的程序。程序 A 生成到 FIFO 的输出,程序 B 从 FIFO 读取该输出并决定进行相应的处理。现在在程序 A 中,我已将 stdout 重定向到 FIFO,以便每个 printf 方法都将输出抛出到 FIFO。

在程序 B 中,我打开 FIFO(在读取模式下)并开始使用 fgets() 从中逐行读取进程 A 的输出。现在问题出现了,因为我期望的行为不是我得到的。

我预计,一旦进程 A 将某些行打印到 FIFO,进程 B 应该立即获取它(就像进程 A 中发生的情况的实时更新),但我得到的是 FIFO 中的内容没有被读入进程 B 直到进程 A 关闭 FIFO 连接,因此我会批量获取数据,而不是在进程 A 将某些内容打印到 FIFO 时立即获取数据。

我想知道这是否是 FIFO 的默认行为(即写入结束关闭连接时批量读取数据)?

我希望此时此刻有代码,但我是从我的家用计算机发布此代码的。

如有任何帮助,我们将不胜感激。

最佳答案

正如我的问题评论中所建议的,我在程序 A 中使用了 fflush 并解决了问题。谢谢以上各位。

关于c - 当数据到达时从 FIFO 读取数据 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378524/

相关文章:

c - 使用英特尔 SSE 内在函数优化代码以进行矢量化

android - GREF 在多线程服务 (aidl) 中增加/减少 - 这是什么意思?

perl - Perl 是否在可存储写入期间安全地延迟 INT 信号?

bash - 后台进程重定向到 COPROC

C自定义随机函数

c - 从 i386 移动到 x86_64 时的浮点精度

c - C中通过unix系统命令打开图像文件

使用子进程时 Popen 出现 python 错误

linux - 如何在linux中路由

linux - 如何在不重启或注销的情况下更新 sudo bash 中的/etc/profile