使用内存映射文件,同时允许其他进程完全访问

我试图在Windows下使用内存映射文件(使用CreateFile / CreateFileMapping / MapViewOfFile函数),而且我正在调用CREATE_FILE时指定FILE_SHARE_READ和FILE_SHARE_WRITE。 但是,这是locking文件被其他进程使用。

我想要的是在调用CreateFileMapping或MapViewOfFile的时候对文件的快照进行内存映射,以便我看不到其他进程对该文件所做的任何更改(写入或删除)。 有点像写时复制,但其他进程正在写入。 我可以在Windows上使用内存映射文件吗?

这只是内存映射文件的工作方式。 Windows对该文件施加了一个硬锁,这样任何人都不能改变其内容,并使其与映射到RAM中的页面不同。 RAM中的这些页面在创建文件视图的所有进程之间共享。 没有“撕下”选项。

您可以简单地映射文件并在视图中复制字节。 通常需要与其他进程的一些同步。