Io 重定向与文件日志记录性能 C/C++

Io 重定向与文件日志记录性能 C/C++

如果我们在运行程序时执行常规 printf 并将 stdout 重定向到文件(例如 ./a.out > log.txt 2>&1 )与使用 fprintf 并记录到 a ,从延迟的角度来看,是否存在性能差异文件。

具体来说,我使用 ACE 日志记录,并且当前在运行程序时将 io 重定向到文件。从性能角度来看,将记录器与文件关联是否有益?

答案1

您应该意识到“延迟”可能包括 stdio 系统缓冲足够的输出以实现“高效”文件系统写入。请参阅man 3 setbuf参考资料 获取更多信息。缓冲是基于每个FILE *基础的,因此stderr通常是无缓冲的,而stdout通常是缓冲的。这就是为什么当输出到stderr和输出到都stdout定向到同一个文件时最终出现无序的原因,按照您的示例。

如果您FILE *的程序打开了一个实例,除非您已经setbuf()对其进行了操作,或者执行了常规的“fflush()”调用,否则“延迟”是无法预测的。

我最终fflush()对崩溃的程序进行了大量调用,以便标准输出的输出实际上在崩溃之前将其放入日志文件中。便宜,但是脏。

相关内容