【发布时间】:2012-07-05 10:15:17
【问题描述】:
通常,stdout 是行缓冲的。换句话说,只要您的 printf 参数以换行符结尾,您就可以期望该行会立即打印。当使用管道重定向到 tee 时,这似乎不成立。
我有一个 C++ 程序a,它输出字符串,总是\n-终止,到stdout。
当它自行运行 (./a) 时,一切都按预期在正确的时间正确打印。但是,如果我将它通过管道传输到 tee (./a | tee output.txt),它在退出之前不会打印任何内容,这违背了使用 tee 的目的。
我知道我可以通过在 C++ 程序中的每次打印操作后添加 fflush(stdout) 来修复它。但是有没有更清洁、更简单的方法?有没有我可以运行的命令,例如,它会强制 stdout 进行行缓冲,即使在使用管道时也是如此?
【问题讨论】:
标签: unix buffer pipe stdout tee