У меня есть этот инструмент, в котором один лог-файл записывается несколькими процессами.
Чего я хочу добиться - это урезать файл при первом его открытии, а затем в конце все записи выполнять несколькими процессами, у которых он открыт.
Все записи систематически сбрасываются и защищены от мьютекса, поэтому я не получаю беспорядочный вывод.
Сначала процесс создает файл, затем запускает последовательность других процессов, по одному, которые затем открывают файл и записывают его (мастер иногда включается с дополнительным контентом; подчиненный процесс может или не может быть открытым и писать что-то).
Я бы хотел, насколько это возможно, не использовать больше 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();
Ну, это не работает: хотя выходные данные подчиненного процесса упорядочены, как и ожидалось, то, что пишет мастер, либо сгруппировано, либо не в том месте, когда оно вообще существует.
У меня два вопроса: правильная ли комбинация флагов для конструктора ofstream? В любом случае, я иду по правильному пути?