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

标签 c linux pipe flush

我的程序在 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/

相关文章:

linux - 存储 ls -ltr| 的倒数第二个目录的名称tail -2 输出到变量中

android - 在哪里可以查看Android系统中进程生命周期管理的android源码?

r - 如何按行计算字符串数字并计算百分比(仅考虑空列)

c - 如何让子进程交替访问和更改相同的值

linux - 使用 RSA 和 DES3 key 加密和解密一串文本

C Typedef Struct/Union 自动转换

c - 如何编写一个函数来搜索数组中的字符串

java - 搜索 ArrayList 中 Key 的总和 (Java)

c++ - 如何在 Win32 中的两个子进程之间设置管道?

c - C中rand()/srand()函数是如何实现的