`unbuffer`或`stdbuf`删除标准缓冲?


13

unbuffer(1)和stdbuf(1)之间有区别吗?据我了解,unbuffer所做的不仅仅是“尽最大的努力”,即在开始时调用libc函数set(X)buf,然后让事情变得顺畅吗?

Answers:


14

它们以完全不同的方式工作。

程序unbuffer使用expect运行命名命令。由于Expect会创建一个伪tty附加到子进程的stdout上,因此可能会欺骗该子进程以为它应该使用行缓冲而不是块缓冲。当isatty(stdout)为true时,某些程序会更改其行为,而其他程序则不会,并且很难知道哪个会和哪个不会。

程序stdbuf尝试将libstdbuf放在libc的前面,以动态加载二进制文件。其中,libstdbuf重新定义了libc stdio调用的默认缓冲策略。

我发现了

 apt-get source expect coreutils

并阅读每个程序的相关资源。


一些令人担忧的东西(来自联机帮助页):unbuffer -p如果将输入输入到unbuffer的进程退出,则可能似乎无法正常工作。考虑:process1 | unbuffer -p process2 | process3如果process1退出,则process2可能尚未完成。毫无缓冲地等待很长一段时间是不可能的
dan3

似乎stdbuf也可以控制使用C流的程序的stdin缓冲,这似乎很重要。为了将来的读者的利益,也许应该将其包括在答案中。
dan3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.