为什么某些cmd在重定向输出时启动了进程阻塞/缓冲输出?

时间:2010-03-09 13:56:33

标签: windows command-line cmd output-redirect

为什么某些进程在我的 Windows 计算机上的命令行启动,如果被重定向而其他进程没有,则缓冲整个输出?

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

tracert ponyoverflow.com > output.txt

... output.txt文件随着时间的推移而增长。这完全是我期望事情表现的方式。

但是,我正在尝试使用潜在供应商的软件产品(iSpring SDK,如果你必须知道的话)并且它似乎在整个过程完成之前缓冲完整的输出。令我感到困惑的是,当这个软件在命令行运行时,输出会逐渐地逐个进行,如预期的那样。

为什么使用和不使用输出重定向调用它之间的行为有什么不同?

跟进各种问题:

  • 这是Windows命令行编程领域的常见和/或标准吗?
  • 我有什么办法可以抓住
  • 在Windows程序员的说法中,我如何准确地与iSpring人员沟通我认为他们的软件应该在命令行中运行的方式?

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

1 个答案:

答案 0 :(得分:1)

(iSpring的人对我的要求反应比我想象的要快得多。点击。这是他们对'为什么'的回答。)

默认情况下,C ++中的标准输出是缓冲的。缓冲区大小约为4KB。应用程序完成后刷新缓冲区。当标准输出与控制台连接时,写入stdout的数据不会被缓冲。