为什么某些进程在我的 Windows 计算机上的命令行启动,如果被重定向而其他进程没有,则缓冲整个输出?
示例:tracert
在写入时不阻止/缓冲输出。如果执行:
tracert ponyoverflow.com > output.txt
... output.txt
文件随着时间的推移而增长。这完全是我期望事情表现的方式。
但是,我正在尝试使用潜在供应商的软件产品(iSpring SDK,如果你必须知道的话)并且它似乎在整个过程完成之前缓冲完整的输出。令我感到困惑的是,当这个软件在命令行运行时,输出会逐渐地逐个进行,如预期的那样。
为什么使用和不使用输出重定向调用它之间的行为有什么不同?
跟进各种问题:
我不确定它有多重要,但我的所有这些实验都是在64位Windows 7 Home Premium机器上进行的。
答案 0 :(得分:1)
(iSpring的人对我的要求反应比我想象的要快得多。点击。这是他们对'为什么'的回答。)
默认情况下,C ++中的标准输出是缓冲的。缓冲区大小约为4KB。应用程序完成后刷新缓冲区。当标准输出与控制台连接时,写入stdout的数据不会被缓冲。