【发布时间】:2012-01-07 09:49:15
【问题描述】:
我的程序在 Linux 上控制一个外部应用程序,通过管道将输入命令传递给外部应用程序 stdin,并通过管道从外部应用程序 stdout 读取输出结果。
问题是对管道的写入是按块而不是按行缓冲的,因此在我的应用程序接收外部应用程序输出的数据之前会出现延迟。无法更改外部应用程序以添加显式 fflush() 调用。
当我将外部应用程序设置为 /bin/cat -n 时(它回显输入,并添加了行号),它似乎可以正常工作,cat 在每一行之后刷新。强制外部应用程序刷新的唯一方法是向其发送 exit 命令;当它接收到命令时,它会刷新,所有答案都会出现在标准输出上,就在退出之前。
我很确定,Unix 管道是这种进程间通信(伪服务器-客户端)的合适解决方案,但也许我错了。
(我刚刚从一个类似的问题中复制了一些文字:Force another program's standard output to be unbuffered using Python)
【问题讨论】:
-
这是另一个出色的 linux 缓冲讨论:unix.stackexchange.com/questions/25372/…