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

时间:2011-09-14 10:11:54

标签: windows memory-mapped-files

我正在尝试在windows下使用内存映射文件(使用CreateFile / CreateFileMapping / MapViewOfFile函数),我在调用CREATE_FILE时正在指定FILE_SHARE_READ和FILE_SHARE_WRITE。但是,这会阻止文件被其他进程使用。

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

1 个答案:

答案 0 :(得分:3)

这不是内存映射文件的工作方式。 Windows对文件进行了硬锁定,这样任何人都无法更改其内容并使其与映射到RAM中的页面不同。 RAM中的那些页面在创建文件视图的所有进程之间共享。没有'撕下'选项。

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