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