2013-05-11 98 views
0

我寫了一個C程序,並在程序中有很多printf()輸出日誌信息給stdout。現在我想用多個進程同時運行不同的參數。我想使用>將標準輸出重定向到日誌文件。 但是,多個進程同時運行,它們的日誌信息輸出相互重疊,這可能會造成未來分析的混淆。如何緩衝和延遲printf()輸出?

一種解決方案是:考慮到不同的過程將退出在不同的時間,修改C程序,所以每個記錄信息被暫時寫入時間的文件。 C程序即將退出時。從臨時文件讀取並將內容寫入標準輸出,這需要進行很多修改。

我的想法是:我希望在C程序中,所有的printf()的輸出可以緩衝,產出投入標準輸出/重定向只有當程序退出。

是有可能或沒有? 謝謝!

+2

只是每一道工序重定向到一個不同的日誌文件,並隨後追加他們的共同文件 – 2013-05-11 15:28:28

+0

哪種操作系統? – 2013-05-11 15:34:54

回答

0

這是不可能的,除非你確定輸出是有限的(例如總輸出小於幾兆字節),否則使用發送到中央記錄器(如syslog)的日誌記錄機制。

在Linux和大多數Posix系統上,執行日誌記錄的最簡單方法是使用syslog(3),該日誌旨在用於日誌記錄(並且能夠處理不同的進程)。我認爲這是更好的方法。

隨着GNU libc的,你可以考慮使用open_memstream(3) -to寫入內存,在這裏你需要確保總產量bounded-並使用atexit(3)有寫在程序的退出到一些文件的存儲流;你可能想使用一些鎖定機制像flock(2)等...

正如評論說J.Holetzeck最簡單的方法就是輸出重定向到不同的文件(可能使用freopen(3),或者乾脆在調用shell),後來合併這些文件。

我猜你使用Linux,或者一些Posix的系統。對於Windows,我不知道。