1

我在 Windows 上键入以下命令:

C:\> abc.exe -t"param1" >> lofile.txt 2>&1

STDOUT 和 STDERR 都被重定向到输出文件,但存在问题。

最初,当程序启动时,有 10 行 STDERR 打印,然后是大约 100 行 STDOUT,然后是更多的 STDERR 行。在控制台(cmd 提示符)上,顺序是正确的。但是当我使用上述命令重定向到文件时,打印的顺序不正确。

首先打印 STDOUT,然后在 STDERR 打印之间的某个位置出现。为什么顺序不正确?

4

1 回答 1

0

我认为原因如下:

STDOUT 和 STDERR 的缓冲区是分开的。一旦每个缓冲区都被填满,内容就会被复制到相应的文件中。

由于 STDERR 缓冲区有时会由于日志数量较少而填充,因此,它会在稍后阶段移动到文件中。这就是为什么在 STDERR 日志之前在文件中看到 STDOUT 日志的原因,即使程序以几行 STDERR 打印开始。

于 2013-02-11T10:23:32.997 回答