在 FIFO 到达时从 FIFO 中读取数据(linux)
Posted
技术标签:
【中文标题】在 FIFO 到达时从 FIFO 中读取数据(linux)【英文标题】:Reading data from FIFO as it arrives (linux) 【发布时间】:2013-03-13 06:33:58 【问题描述】:我有两个用 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
?
当进程 B 去读取 FIFO 时,您必须先使用 fflush,以确保在读取发生之前写入所有缓冲的数据。
或者,使用setbuf
将流设置为无缓冲。
谢谢大家。我没有打电话给fflush。我会尝试并在那里提供反馈。
【参考方案1】:
根据 cmets 对我的问题的建议,我在程序 A 中使用了 fflush 并解决了问题。谢谢以上所有。
【讨论】:
以上是关于在 FIFO 到达时从 FIFO 中读取数据(linux)的主要内容,如果未能解决你的问题,请参考以下文章