単一のログのようなファイルが複数のプロセスによって書き込まれるこのツールがあります。
私が達成したいのは、ファイルを最初に開いたときにファイルを切り捨て、最後にファイルを開いたいくつかのプロセスによってすべての書き込みを行うことです。出力が混乱しないように、すべての書き込みは体系的にフラッシュされてミューテックスで保護されます。
最初に、プロセスはファイルを作成し、次に一連の他のプロセスを一度に 1 つずつ開始し、ファイルを開いて書き込みます (マスターは追加のコンテンツでチャイムを鳴らすことがあります。スレーブ プロセスは開いている場合と開いていない場合があります。何かを書いている)。
可能な限り、既存のものよりも多くの 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();
まあ、これはうまくいきません: スレーブ プロセスの出力は期待どおりに並べられますが、マスターが書き込む内容は、存在する場合でも、一緒にまとめられているか、間違った場所に置かれています。
2 つの質問があります: ofstream のコンストラクターに与えられたフラグの組み合わせは正しいものですか? とにかく私は正しい道を進んでいますか?