2013-03-13 132 views
0

我有两个用C语言编写的程序。程序A产生输出到FIFO,程序B读取从FIFO输出并决定相应处理。现在在程序A中,我已将stdout重定向到FIFO,以便每个printf方法都将输出发送到FIFO。从FIFO读取数据(linux)

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

我预计,只要进程A打印一行到FIFO,进程B应该立即得到它(如进程A中发生的实时更新),但是我得到的是FIFO中的内容不被读取在进程B中,直到进程A关闭FIFO连接,因为一旦进程A打印某些内容给FIFO,我就可以批量获取数据。

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

我希望我在这个时候有代码,但我从我的家用电脑发布这个。

任何帮助,将不胜感激。

+5

你在程序A中调用了'fflush'吗? – 2013-03-13 06:37:05

+2

当进程B读取FIFO以确保在读取发生之前写入所有缓冲数据时,您必须先使用fflush。 – 2013-03-13 06:50:50

+1

或者,使用'setbuf'将流设置为无缓冲。 – 2013-03-13 07:39:46

回答

0

正如在我的问题的评论中所建议的,我在程序A中使用了fflush,它解决了这个问题。非常感谢以上。