如果我们在运行程序时执行常规 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()
对崩溃的程序进行了大量调用,以便标准输出的输出实际上在崩溃之前将其放入日志文件中。便宜,但是脏。