Escreva de maneira confiável no mesmo arquivo a partir de diferentes processos

Eu criei uma pequena solução de rastreamento C ++ que funciona muito bem. Dentro de um processo, tudo está bem, mas quando abro o arquivo de saída de diferentes processos, os dados não são gravados corretamente. Abri o arquivo com FILE_SHARE_WRITE para poder gravar no arquivo quando ele já estiver aberto. Então eu criei um mutex nomeado para garantir a sincronização adequada entre os processos. Mas parece que isso não é suficiente. Segundo o MSDN, isso funciona em um processo, mas não entre processos diferentes. Em seguida, tentei chamar FlushFileBuffers após cada gravação enquanto o mutex ainda estava em espera, mas os dados ainda estavam distorcidos dessa maneira

O formato é a identificação do processo de tempo / o método de identificação da thread, digite / deixe / espaço para nome com gravidade + método e, em seguida, o texto da mensagem.

10:29:42.994 7448/2236       }} Dll2.Test.fndll2 L1 -> Duration: 0.094s
10:29:43.040 7448/2236 {{       Dll2.DllMain L1
10:29:43.134 7448/2236 Info     Dll2.DllMain L1 Process detach
10:29:43.181 7448/2236       }} Dll2.DllMain L1 -> Duration: 0.141s
     }} Dll2.DllMain L1 -10:29:42.681 7448/2236 Info     Dll1.DllMain L1 Process attach
10:29:42.728 7448/2236       }} Dll1.DllMain L1 -10:29:42.744 2216/5510:29:42.775 7448/2236 {{       Dll1.Test.fndll1 10:210:29:42.822 7448/2236 Info     Dll1.Test.fndll1 10:29:42.837 2216/557610:29:42.853 7448/2236       }} Dll1.Test.fndll1 L110:29:42.884 2216/557610:29:43.306 7448/2236 {{       Dll1.DllMain L1
10:29:43.353 7448/2236 Info     Dll1.DllMain L1 Process detach
10:29:43.400 7448/2236       }} Dll1.DllMain L1 -> Duration: 0.094s

Eu olheiFILE_FLAG_NO_BUFFERING mas tem sérias limitações e parecenão é fácil de usar.

Alguém sabe o caminho certo para escrever sincronizado no mesmo arquivo sem distorcer a saída?

Sua,

Alois Kraus

questionAnswers(5)

yourAnswerToTheQuestion