为什么一些进程启动在我的Windows机器上的命令行块/缓冲其整个输出,如果它被redirect,而其他的不是?
示例: tracert
在写入时不会阻止/缓冲输出。 如果执行:
tracert ponyoverflow.com > output.txt
output.txt
文件随着时间而增长。 这完全是我期望事情的行为。
但是,我试图与一个潜在的供应商的软件产品(如果你必须知道, iSpring SDK )合作,它似乎缓冲了完整的输出,直到过程完成。 我感到困惑的是,当这个软件运行在命令行时,输出如预期的那样逐行地逐行。
为什么在使用输出redirect和不使用输出redirect之间有什么不同?
跟进各种问题:
我不确定它有多重要,但是我所有这些实验都是在64位Windows 7 Home Premium机器上进行的。
(iSpring的人对我的要求反应比我想象的要快得多,点击下面的答案来解释下面的“为什么”)。
C ++中的标准输出默认被缓冲。 缓冲区大小约为4KB。 当应用程序结束时,缓冲区被刷新。 当标准输出连接到控制台时,写入stdout的数据不会被缓冲。