Escriba de manera confiable en el mismo archivo desde diferentes procesos

Creé una pequeña solución de seguimiento de C ++ que funciona muy bien. Dentro de un proceso, todo está bien, pero cuando abro el archivo de salida de diferentes procesos, los datos no se escriben correctamente. Abrí el archivo con FILE_SHARE_WRITE para poder escribir en el archivo cuando ya está abierto. Luego creé un mutex con nombre para garantizar una sincronización adecuada entre los procesos. Pero parece que esto no es suficiente. Según el MSDN, esto funciona dentro de un proceso pero no entre procesos diferentes. Luego intenté llamar a FlushFileBuffers después de cada escritura mientras el mutex todavía estaba en espera, pero los datos todavía estaban distorsionados de esta manera.

El formato es la identificación del proceso de tiempo / método de identificación de subproceso enter / leave / severity namespace + method y luego el texto del mensaje.

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

He miradoFILE_FLAG_NO_BUFFERING pero tiene limitaciones severas y pareceno es fácil de usar.

¿Alguien sabe la forma correcta de escribir sincronizado en el mismo archivo sin distorsionar la salida?

Tuya,

Alois Kraus

Respuestas a la pregunta(5)

Su respuesta a la pregunta