【发布时间】:2012-07-12 08:21:40
【问题描述】:
我正在编写一个服务,它将创建一个文件并在其中写入记录,其他进程(有四个并发进程)将读取一个记录并修改它的一些值。我目前正在使用LockFileEx() 和UnLockFileEx() 函数进行排序。
我正在使用 createFile 函数通过我的服务创建文件,如下所示
FILEHANDLE = ::CreateFile ( TEXT("C:\\abc.BIN"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS ,
FILE_ATTRIBUTE_NORMAL,
NULL );
和其他进程获取文件的句柄,如下所示:
FILEHANDLE = ::CreateFile(TEXT("C:\\abc.BIN"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
问题是两个或多个进程无法同时获取文件的句柄。当一个进程正在写入文件时,即使我使用LockFileEx() 函数锁定文件的指定区域而不是完整文件,其他进程甚至无法获取文件句柄来读取文件。每次尝试通过设置 FILE_SHARED_READ 标志打开文件或尝试以独占方式打开文件时,我都会收到系统错误代码 32。当我设置FILE_SHARE_READ | FILE_SHARE_WRITE 时,会发生死锁。
请告诉我任何解决方案,以便我可以通过多个进程打开文件。
谢谢!!
【问题讨论】: