共享内存File Mapping

文件映射允许进程将文件的内容视为进程虚拟地址空间中的内存块。可以通过简单的指针操作来实现对文件内容的修改。
当多个进程使用同一个file mapping,就可以实现进程间通信。当然,需要有同步机制(如信号量,互斥锁,事件等)进行保护,否则会发生数据错乱。共享内存,是file mapping的一个特殊实现。


// 创建一个想共享的文件数据句柄
HANDLE CreateFileMapping(
  HANDLE hFile,                       //物理文件句柄
  LPSECURITY_ATTRIBUTES lpAttributes, //安全设置
  DWORD flProtect,                    //保护设置
  DWORD dwMaximumSizeHigh,            //高位文件大小
  DWORD dwMaximumSizeLow,             //低位文件大小
  LPCTSTR lpName                      //共享内存名称
);

// 打开一个已经存在的共享文件
HANDLE OpenFileMappingW(
  DWORD   dwDesiredAccess,
  BOOL    bInheritHandle,
  LPCWSTR lpName
);

// 获取共享的内存地址
LPVOID MapViewOfFile(
  HANDLE hFileMappingObject,
  DWORD dwDesiredAccess,
  DWORD dwFileOffsetHigh,
  DWORD dwFileOffsetLow,
  DWORD dwNumberOfBytesToMap
);

// 卸载内存映射文件地址指针
BOOL UnmapViewOfFile(
  LPCVOID lpBaseAddress
);

// 把文件映射视图中的修改的内容或全部写回到磁盘文件中
BOOL FlushViewOfFile(
  LPCVOID lpBaseAddress,
  SIZE_T  dwNumberOfBytesToFlush
);

Demo:
svn://gitee.com/sudaidai/Knowledge_List_of_C
文件夹路径:WindowsAPI/File Mapping

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容