我有這個工具,其中一個單一的類似日誌的文件被多個進程寫入。同時寫入文件
我想要達到的目標是在第一次打開文件時截斷文件,然後讓幾個打開的進程完成所有寫操作。 所有的寫操作都是系統刷新和互斥保護的,這樣我就不會出現混亂的輸出。
首先,進程創建文件,然後啓動一系列其他進程,一次一個,然後打開文件並寫入文件(主控制器有時會插入其他內容;從屬進程可能或可能不要開放和寫作)。
我希望儘可能不要使用已存在的更多IPC(我現在所做的只是寫入一個popen創建的管道)。我無法訪問其他CRT和Win32 API的外部庫,並且我不想開始編寫序列化代碼。
下面是一些代碼,其中顯示出我已經走了:
// open the file. Truncate it if we're the 'master', append to it if we're a 'slave'
std::ofstream blah(filename, ios::out | (isClient ? ios:app : 0));
// do stuff...
// write stuff
myMutex.acquire();
blah << "stuff to write" << std::flush;
myMutex.release();
好了,這不工作:雖然從過程的輸出是有序的預期,何師傅寫或者是聚集在一起或者在錯誤的地方,當它存在時。
我有兩個問題:給thestream的構造函數提供的標誌組合是正確的嗎?無論如何,我的方向是否正確?
你還記錄一個時間戳嗎?如果是這樣,你可以看到排序是否正確。也許你的日誌記錄是正確的,但你的主進程正在做你沒想到的事情 – Toad 2009-12-16 16:42:02
/我踢自己。時間戳揭示了事實:這些事件並不按照我認爲的那樣發生。謝謝你的提示 ! – 2009-12-16 18:36:28