STDOUT和STDERR的重定向顺序不正确



我在windows上键入以下命令:

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

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

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

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

我认为原因如下:

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

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

最新更新