![Io 重定向与文件日志记录性能 C/C++](https://linux22.com/image/64271/Io%20%E9%87%8D%E5%AE%9A%E5%90%91%E4%B8%8E%E6%96%87%E4%BB%B6%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E6%80%A7%E8%83%BD%20C%2FC%2B%2B.png)
如果我们在运行程序时执行常规 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()
对崩溃的程序进行了大量调用,以便标准输出的输出实际上在崩溃之前将其放入日志文件中。便宜,但是脏。