我有一个文件随着时间的推移而增加,并且需要在没有任何竞争条件的情况下读取文件或在Windows上的C ++中的其他进程中读取文件。
给出了一个文件,我没有空间可以玩它。我唯一能做的就是优雅地阅读它。
你有什么想法很好地处理这个案子吗?
TIA
答案 0 :(得分:0)
在Win32中,您必须确保每个编写器至少打开读取共享访问权限,并且每个阅读器至少打开共享访问权限打开该文件。如果您有> 1个读者或> 1个作家,则需要进一步分享。
请参阅此处了解CreateFile个文档,dwShareMode
参数。
答案 1 :(得分:0)
您几乎肯定需要使用CreateFile
(在两个进程中)才允许共享文件。如果编写应用程序以独占共享模式打开文件并使其保持打开状态,则阅读应用程序将无法打开该文件。
从那里开始,防止竞争条件相当直截了当:每个进程通常会使用LockFile
或LockFileEx
锁定文件的一部分,以便在使用数据时进行独占访问在该文件的该部分。一般来说,你希望保持这段时间尽可能短,所以你将尽可能快地锁定部分,读/写和解锁(即,如果你能避免它,不做任何其他事情) )。