有没有办法将Linux管道设置为非缓冲或行缓冲?

ern*_*rn0 3 c linux pipe flush

我的程序在Linux上控制外部应用程序,通过管道将输入命令传递到外部应用程序stdin,并通过外部应用程序stdout的管道读取输出结果.

问题是对管道的写入是按块缓冲的,而不是按行缓冲的,因此在我的应用程序接收外部应用程序输出数据之前会发生延迟.无法更改外部应用程序以添加显式fflush()调用.

当我将外部应用程序设置为/ bin/cat -n(它回显输入,添加了行号)时,它正常工作,看起来,在每行之后刷新.强制外部应用程序刷新的唯一方法是向它发送exit命令; 当它收到命令时,它会刷新,所有答案都会在退出之前出现在标准输出上.

我很确定,Unix管道对于那种进程间通信(伪服务器 - 客户端)来说是合适的解决方案,但也许我错了.

(我刚刚从一个类似的问题中复制了一些文本:使用Python强制另一个程序的标准输出无缓冲)

Mic*_*lon 5

不要使用管道.请改用pty.Pty(伪ttys)具有线缓冲的好处,如果你需要它,它为你的数据流提供了简单的框架.