我的程序正在控制Linux上的外部应用程序,通过管道将输入命令传递到外部应用程序stdin,并通过外部应用程序stdout的管道读取输出结果。有没有办法将Linux管道设置为非缓冲或线路缓冲?
问题是写入管道是按块缓存,而不是按行存放,因此延迟发生在我的应用程序接收到外部应用程序输出的数据之前。无法更改外部应用程序以添加显式fflush()调用。
当我的外部应用程序设置为/斌/猫-n(它回显输入,添加了行号),它工作正常,现在看来,在每行后猫刷新。强制外部应用程序刷新的唯一方法是将退出命令给它;当它收到命令时,它会刷新,所有答案出现在stdout上,就在退出之前。
我很确定,Unix管道是适合那种进程间通信(伪服务器客户端)的解决方案,但也许我错了。
(我刚刚复制了一个类似的问题,一些文字:Force another program's standard output to be unbuffered using Python)
这是另一个优秀的Linux缓冲讨论: http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe – AAAfarmclub