1. 用途和基本操作
用于不同进程之间的内存共享操作, 可以将一个物理文件映射到内存当中然后直接利用分配到的或者打开的命名共享内存的地址空间实现资源共享访问
2. 相关流程
1) 新建命名共享内存
首先利用CreateFile或者CreateFileForMapping获得一个用于映射的物理文件句柄, 然后利用该文件句柄结合CreateFileMapping得到一个命名的共享内存映射文件句柄
2) 打开命名共享内存
如果需要共享已经存在的命名共享内存映射文件, 使用OpenFileMapping函数
3) 获得地址空间指针
进行内存映射文件的读写和一般的文件读写不同, 是直接面对你申请的地址空间, 为此需要使用MapViewOfFile得到相关的地址LPVOID类型的指针.
如果需要进行文件写入, 可以通过类型转换直接对于内存地址进行赋值, 比如:
memcpy( lpAddress, lpBuf, ....)
这里自然需要防止内存溢出的情况
如果是读取操作, 呵呵将参数顺序调整一下就可以了
4) 将内存复制到所映射的物理文件上面
FlushMapViewOfFile函数可以将内存里面的内容DUMP到物理磁盘上面
5) 卸载内存映射文件地址指针
UnmapViewOffFile函数就是卸载
6) 关闭内存映射文件
太简单了, CloseHandle搞定
2. 相关背景
其实内存映射技术本身没有什么难度, 关键在于共享内存映射的使用上面, 特别是进行不同进程之间的同步, 尤其是如果该内存映射是跨机器的情况下, 你需要考虑不同的异常情况.
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=3016246
[2005-07-22 00:00:00.0] 8139 企业宣传 ★★市政基础设施工程施工技术文件(表样)
[2005-07-22 00:00:00.0] 8139 企业宣传 ★★市政基础设施工程施工技术文件(表样)
[2005-07-16 00:00:00.0] Linux中查找文件常用的技术和方法
[2005-09-16 00:00:00.0] 传文件
[2005-08-02 00:00:00.0] 什么是技术?