#include
#include
#include
//说明:使用内存映射文件的实践
int main(void)
{
//第一步:创建或者打开文件内核对象
HANDLE hdlToFile;
hdlToFile = CreateFile(TEXT("1.txt"),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hdlToFile == INVALID_HANDLE_VALUE)
{
printf("创建或者打开文件失败:%d\n",GetLastError());
return 0;
}
//第二步:创建一个文件映射内核对象
HANDLE hdlToMapFile = CreateFileMapping(hdlToFile,
NULL,
PAGE_READWRITE,
0,
100,
NULL);
if(hdlToMapFile == NULL)
{
_tprintf(TEXT("创建文件映射内核对象失败:%d\n"),GetLastError());
CloseHandle(hdlToFile);
return 0;
}
//第三步:将文件数据映射到进程的地址空间
DWORD MapFileAddr = (DWORD)MapViewOfFile(hdlToMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
100);
if((PVOID)MapFileAddr == NULL)
{
_tprintf(TEXT("文件映射失败:%d\n"), GetLastError());
CloseHandle(hdlToFile);
CloseHandle(hdlToMapFile);
return 0;
}
char *temp = (char*)MapFileAddr;
for(int i = 0; i < 100; i++)
*(temp + i) = (40 + i);
for(i=0; i<100; i++)
_tprintf(TEXT("%c "), *(temp + i));
//第四步:将文件映象从进程地址空间中撤消
if(!UnmapViewOfFile((LPCVOID)MapFileAddr))
{
_tprintf(TEXT("撤消文件映象失败:%d\n"), GetLastError());
CloseHandle(hdlToFile);
CloseHandle(hdlToMapFile);
return 0;
}
//第五步:关闭内核对象句柄
CloseHandle(hdlToFile);
CloseHandle(hdlToMapFile);
return 1;
} |