C

Io 重定向與文件日誌記錄性能 c/c++

  • June 20, 2017

如果我們在執行程序時執行正常 printf 並將標準輸出重定向到文件(例如 ./a.out > log.txt 2>&1 )與使用 fprintf 並登錄到一個文件,從延遲的角度來看是否存在性能差異文件。

具體來說,當我執行程序時,我使用 ACE 日誌記錄並目前將 io 重定向到一個文件。從性能的角度來看,將記錄器與文件相關聯是否有益。

您應該知道“延遲”可能包括 stdio 系統為“高效”文件系統寫入緩衝足夠的輸出。有關man 3 setbuf更多資訊,請參閱。緩衝是基於每個的FILE *,因此stderr通常是無緩衝的,而stdout通常是緩衝的。這就是為什麼根據您的範例,當它們都被定向到同一個文件時,輸出stderr和輸出最終會出現亂序。stdout

如果您FILE *的程序打開了一個實例,除非您已經完成setbuf()它,或者執行正常的“fflush()”呼叫,否則無法預測“延遲”。

我最終對fflush()崩潰的程序進行了很多呼叫,因此 stdout 的輸出實際上在崩潰之前將其轉換為日誌文件。便宜,但很髒。

引用自:https://unix.stackexchange.com/questions/199937