现在的位置: 首页 > 综合 > 正文

c++中共享内存操作函数MapViewOfFile解析(二)

2013年10月12日 ⁄ 综合 ⁄ 共 1154字 ⁄ 字号 评论关闭

此函数映射文件视图到调用进程的地址空间。

LPVOID MapViewOfFile(

 HANDLE hFileMappingObject,   // handle to file-mapping object

 DWORD dwDesiredAccess,       // access mode

 DWORD dwFileOffsetHigh,      // high-order DWORD of offset

 DWORD dwFileOffsetLow,       // low-order DWORD of offset

 SIZE_T dwNumberOfBytesToMap  // number of bytes to map

);

hFileMappingObject

       一个打开的映射文件对象的句柄,这个句柄可以由CreateFileMapping和OpenFileMapping函数返回。

dwDesiredAccess

       指定访问文件视图的类型

描述

FILE_MAP_WRITE

读和写的访问权限。hFileMappingObject参数创建时,有PAGE_READWRITE保护属性。

FILE_MAP_READ

写的访问权限。hFileMappingObject参数创建时,有PAGE_READWRITE或者PAGE_READONLY保护属性。

FILE_MAP_ALL_ACCESS

和FILE_MAP_WRITE一样

FILE_MAP_COPY

写复制访问权限。如果创建映射文件对象时,有PAGE_WRITECOPY和此参数(FILE_MAP_COPY),会接收执行文件的视图。

dwFileOffsetHigh

       指定开始映射文件偏移量的高位。

dwFileOffsetLow

       指定开始映射文件偏移量的低位。

dwNumberOfBytesToMap 

       指定需要映射的文件的字节数量,如果dwNumberOfBytesToMap为0,映射整个的文件。

返回值

       如果函数成功,返回值是映射视图的开始位置。

如果函数失败,返回值为NULL,可以通过调用GetLastError函数获得详细的错误信息。

说明

       映射一个文件,让其指定的文件部分在调用进程的地址空间可见。

      MapViewOfFile用于将存储于磁盘的文件放进一个进程的虚拟地址空间,并在该进程的虚拟地址空间中产生一个用于"存放"该文件的区域,这个空间就叫做File View。系统同时产生一个存放在物理内存中的File Mapping Object用于维护这种映射关系。这时当多个进程需要读写那个文件数据时,它们的File View其实对用的都是同一个File Mapping Object。这样做可以节省内存和保持数据的同步性,并达到数据共享的目的。

   

抱歉!评论已关闭.