为什么某些cmd在输出redirect时启动进程阻塞/缓冲区输出?

为什么一些进程启动在我的Windows机器上的命令行块/缓冲其整个输出,如果它被redirect,而其他的不是?

示例: tracert在写入时不会阻止/缓冲输出。 如果执行:

 tracert ponyoverflow.com > output.txt 

output.txt文件随着时间而增长。 这完全是我期望事情的行为。

但是,我试图与一个潜在的供应商的软件产品(如果你必须知道, iSpring SDK )合作,它似乎缓冲了完整的输出,直到过程完成。 我感到困惑的是,当这个软件运行在命令行时,输出如预期的那样逐行地逐行。

为什么在使用输出redirect和不使用输出redirect之间有什么不同?

跟进各种问题:

  • 在Windows命令行编程的世界中这是常见的和/或标准的吗?
  • 有什么我可以做的抢
  • 在Windows程序员的说法中,我如何正确地与iSpring人沟通,我认为他们的软件应该在命令行上运行?

我不确定它有多重要,但是我所有这些实验都是在64位Windows 7 Home Premium机器上进行的。

(iSpring的人对我的要求反应比我想象的要快得多,点击下面的答案来解释下面的“为什么”)。

C ++中的标准输出默认被缓冲。 缓冲区大小约为4KB。 当应用程序结束时,缓冲区被刷新。 当标准输出连接到控制台时,写入stdout的数据不会被缓冲。