我的程序在 Linux 上控制一个外部应用程序,通过管道将输入命令传递到外部应用程序标准输入,并通过管道从外部应用程序标准输出读取输出结果。
问题是写入管道是按 block 缓冲的,而不是按行缓冲的,因此在我的应用程序接收到外部应用程序输出的数据之前会发生延迟。无法更改外部应用程序以添加显式 fflush() 调用。
当我将外部应用程序设置为 /bin/cat -n(它回显输入,添加了行号)时,它似乎正常工作,cat 每行后刷新。强制外部应用程序刷新的唯一方法是向它发送 exit 命令;当它收到命令时,它会刷新,并且所有答案都会出现在标准输出上,就在退出之前。
我很确定,Unix 管道是这种进程间通信(伪服务器-客户端)的合适解决方案,但也许我错了。
(我刚刚从类似的问题中复制了一些文本:Force another program's standard output to be unbuffered using Python)
最佳答案
不要使用管道。请改用 pty。如果需要,Pty(伪 ttys)具有行缓冲的优势,这为您的数据流提供了简单的框架。
关于c - 有没有办法将 Linux 管道设置为非缓冲或行缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287323/