c++中共享内存操作函数CreateFileMapping解析(一)
来源:互联网 发布:网络活动策划方案 编辑:程序博客网 时间:2024/05/20 15:37
为指定的文件创建或者打开一个命名的或者非命名的文件映射对象。
HANDLE CreateFileMapping(
HANDLE hFile, // handle to file
LPSECURITY_ATTRIBUTESlpAttributes, // security
DWORD flProtect, // protection
DWORD dwMaximumSizeHigh, // high-order DWORD of size
DWORD dwMaximumSizeLow, // low-order DWORD of size
LPCTSTR lpName // object name
);
hFile:
指向创建映射对象的文件句柄。如果需要和物理文件关联,要确保物理文件创建的时候的访问模式和由flProtect参数指定的"保护标识"匹配,比如:物理文件只读, 内存映射需要读写就会发生错误。推荐你的物理文件使用独占方式创建。
如果hFile为INVALID_HANDLE_VALUE,需要在dwMaximumSizeHigh和dwMaximumSizeLow中指定映射对象的大小。在这种情况下,CreateFileMapping由操作系统分页文件而不是由一个文件系统中的一个命名的文件创建一个指定大小的文件对象。文件映射对象可以同过复制,继承或者命名得到。
lpAttributes:
指向一个SECURITY_ATTRIBUTES结构体,决定是否被子进程继承。如果为NULL,句柄不能被继承,一般设置成NULL。
flProtect:
当文件映射的时候,需要此参数设置保护标识。
值
描述
PAGE_READONLY
只有读的权限,那些试图写或者执行的操作都是非法的
PAGE_READWRITE
同时有读和写的权限
PAGE_WRITEONLY
只有写的权限
dwMaximumSizeHigh:
文件映射对象的最大值的高位(DWORD)
dwMaximumSizeLow
文件映射对象的最大值的低位(DWORD),如果dwMaximumSizeHigh为0,文件映射对象的最大值为由hFile标识的文件的大小。
lpName
指定文件映射对象的名称。
如果这个参数匹配一个存在的命名映射对象,这个函数用flProtect的访问权限请求访问这个存在的映射对象。
如果参数为NULL,创建一个未命名的映射对象。
如果参数名称匹配存在的事件、信号量、互斥、等待时间或者工作对象,函数返回失败,GetLastError函数会返回ERROR_INVALID_HANDLE。因为这些对象共用相同的命名空间。
返回值
如果函数返回成功,,返回值为文件对象句柄;如果这个对象在调用此函数的时候已经存在,函数返回这个存在的句柄(大小为现在的大小),GetLastError函数会返回ERROR_ALREADY_EXISTS。
说明
在文件映射对象创建之后,文件大小不要超过文件映射对象的大小,并不是所有的文件内容适合共享。
如果应用指定的文件映射对象的大小超过实际的文件大小,硬盘上的文件增大去匹配指定的文件映射对象大小。如果文件不能增大,则会创建文件映射对象失败。GetLastError函数会返回ERROR_DISK_FULL。
CreateFileMapping返回句柄有所有对文件对象句柄访问权限。
例子
执行一个映射对象创建函数,如果这个对象已经存在,则函数执行失败。可以用以下代码判断:
hMap= CreateFileMapping(...);
if (hMap != NULL&& GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMap);
hMap = NULL;
}
return hMap;
- c++中共享内存操作函数CreateFileMapping解析(一)
- CreateFileMapping映射共享内存
- 内存共享CreateFileMapping用法
- c++中共享内存操作函数MapViewOfFile解析(二)
- c++中共享内存操作函数解析(三)
- 共享内存mmap()和CreateFileMapping()
- <Win32 API> CreateFileMapping 共享内存
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- 使用文件映射的方式进行共享数据中CreateFileMapping、MapViewOfFile函数参数说明
- shm*()--共享内存操作函数
- c语言如何操作内存(数据类型、函数在内存中解析简介)
- c语言如何操作内存(数据类型、函数在内存中解析简介)
- C语言中内存操作函数
- C语言中内存操作函数memset
- Oracle 10.2.0.1.0 出现数据文件使用率负值的处理方法
- 为什么现在的硬盘都是串口而不用并口?
- 显微镜下new iPad和iPad 2屏幕像素数量对比
- java学习笔记(四)
- C++方向经典书籍
- c++中共享内存操作函数CreateFileMapping解析(一)
- 游戏策划新手指南
- 将数组元素颠倒的java代码
- 采集原理 代码直接可用
- c++中共享内存操作函数MapViewOfFile解析(二)
- jQuery控制元素显示、隐藏、切换、滑动的方法
- php操作xml(2)
- 温家宝历年两会记者会引用古诗文盘点
- PHP实现MVC开发得最简单的方法——单点入口