我有这个工具,其中一个单一的类似日志的文件被多个进程写入。同时写入文件
我想要达到的目标是在第一次打开文件时截断文件,然后让几个打开的进程完成所有写操作。 所有的写操作都是系统刷新和互斥保护的,这样我就不会出现混乱的输出。
首先,进程创建文件,然后启动一系列其他进程,一次一个,然后打开文件并写入文件(主控制器有时会插入其他内容;从属进程可能或可能不要开放和写作)。
我希望尽可能不要使用已存在的更多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();
好了,这不工作:虽然从过程的输出是有序的预期,何师傅写或者是聚集在一起或者在错误的地方,当它存在时。
我有两个问题:给thestream的构造函数提供的标志组合是正确的吗?无论如何,我的方向是否正确?
你还记录一个时间戳吗?如果是这样,你可以看到排序是否正确。也许你的日志记录是正确的,但你的主进程正在做你没想到的事情 – Toad 2009-12-16 16:42:02
/我踢自己。时间戳揭示了事实:这些事件并不按照我认为的那样发生。谢谢你的提示 ! – 2009-12-16 18:36:28