若要使用内存映射文件,必须执行下列操作步骤:
1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件。(CreateFile)
2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件。(CreateFileMapping)
3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中。(MapViewOfFile)
当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:
1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。(UnmapViewOfFile)
2) 关闭文件映射内核对象。(CloseHandle)
3) 关闭文件内核对象。(CloseHandle)
code:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
HANDLE file = CreateFile("test.txt",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
int len = GetFileSize(file,NULL);
if(file == INVALID_HANDLE_VALUE)
{
printf("create file error/n");
return 0;
}
HANDLE fileMap = CreateFileMapping(file,NULL,PAGE_READWRITE,0,0,NULL);
if(fileMap==NULL)
{
CloseHandle(file);
printf("create filemaping error/n");
return 0;
}
char *pData = (char*)MapViewOfFile(fileMap,FILE_MAP_ALL_ACCESS,0,0,0);
if(pData==NULL)
{
CloseHandle(fileMap);
CloseHandle(file);
printf("create filemaping error/n");
return 0;
}
for(int i=0; i<len/2; ++i)
{
char t = pData[i];
pData[i] = pData[len-i-1];
pData[len-i-1] = t;
}
UnmapViewOfFile((void*)pData);
CloseHandle(fileMap);
CloseHandle(file);
return 0;
}