1
.
HANDLE CreateFileMapping(
HANDLE hFile, //
一个文件句柄
LPSECURITY_ATTRIBUTE lpAttributes, //
定义内存映射文件对象是否可以被承
DWORD flProtect, //
该内存映射文件的保护类型
DWORD dwMaximumSizeHigh,//
内存映射文件的长度
DWORD dwMaximumSizeLow, //
LPCTSTR lpName //
内存映射文件的名字
)
hFile
指定要映射的文件的句柄,如果这是一个已经打开的文件的句柄(
CreateFile
函数的返回值),那么将建立这个文件的内存映射文件,如果这个参数为
-1
,则建立共享内存。
lpAttribute
安全属性,一般设为
NULL
flProtect
指定映射文件的保护类型,它的取值可以是
PAGE_READONLY
(内存页面只读)
或
PAGE_READWRITE
(内存页面可读写)。
dwMaximumSizeHigh
和
dwMaximumSizeLow
参数组合指定了一个
64
位的内存映射文件的长度。一种简单的方法是将这两个参数全部设置为
0
,那么内存映射文件的大小将与磁盘文件大小一致。
2
.
HANDLE OpenFileMapping(
DWORD dwDesiredAccess, //
指定保护类型
BOOL bIsInheritHandle, //
返回的句柄是否可以被继承
LPCSTR lpName //
创建对象时使用的名字
)
如果创建的是共享内存,其他进程不能再使用
CreateFileMapping
函数去创建同名的内存映射文件对象,而要使用
OpenFileMapping
函数打开已创建好的对象。
dwDesiredAcess
指定保护类型有
FILE_MAP_WRITE
或
FILE_MAP_READ
3
.
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, //
前两个函数返回的内存映射文件的句柄
DWORD dwDesiredAcess, //
保护类型
FILE_MAP_READ ,FILE_MAP_WRITE
DWORD dwFileOffsetHight, //
从文件的那个地址开始映射
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap //
要映射的字节数,为
0
则映射整个文件
)
4
.
BOOL UnmapViewOfFile( LPCVOID lpBaseAddress )
当不再使用内存映射文件时,可以通过
UmmapViewOfFile
函数撤销映射并使用
CloseHandle
函数关闭内存映射文件的句柄。
5
.
BOOL FlushViewOfFile(
LPCVOID lpBaseAddress, //
开始的地址
SIZE_T dwNumberOfBytesToFlush //
数据块的大小
)
如果修改了映射视图中的内存,系统会在试图撤销映射或文件映射对象被删除时自动将数据写到磁盘上,但程序也可以根据需要将视图中的数据立即写到磁盘上。