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

标签 windows memory-mapped-files

我正在尝试在 Windows 下使用内存映射文件(使用 CreateFile/CreateFileMapping/MapViewOfFile 函数),并且我当前在调用 CREATE_FILE 时指定 FILE_SHARE_READ 和 FILE_SHARE_WRITE。但是,这会锁定文件以防止其他进程使用。

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

最佳答案

这不是内存映射文件的工作方式。 Windows 对该文件进行了硬锁定,因此没有人可以更改其内容并使其与映射到 RAM 中的页面不同。 RAM 中的这些页面在创建文件 View 的所有进程之间共享。没有“撕下”选项。

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

关于windows - 使用内存映射文件同时允许其他进程完全访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7414579/

相关文章:

java - Windows 10中的最大文件名长度是多少? Java会尝试/捕获会低谷exeption?

windows - 批处理文件中的 IP 地址

windows - 如何创建右键单击上下文 shell 快捷方式 "edit with Emacs"?

c# - .NET 4.0 内存映射文件性能

c# - MemoryMappedFile 和 FileSystemWatcher

c# - MemoryMappedFile CreateViewAccessor 抛出 "Not enough storage is available to process this command."

c# - 使用 MemoryMappedViewAccessor 错误编写打包结构?

c++ - 关于大文件文本编辑器中的内存映射文件和用法

mysql - mysql for django 1.8安装错误

c++ - _stricmp 在字符串匹配时返回错误值。该怎么办?