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的默认行为(即写入结束时批量读取数据会关闭连接)?
我希望我在这个时候有代码,但我从我的家用电脑发布这个。
任何帮助,将不胜感激。
你在程序A中调用了'fflush'吗? – 2013-03-13 06:37:05
当进程B读取FIFO以确保在读取发生之前写入所有缓冲数据时,您必须先使用fflush。 – 2013-03-13 06:50:50
或者,使用'setbuf'将流设置为无缓冲。 – 2013-03-13 07:39:46