Board logo

标题: 学习windows内存映射的小笔记 [打印本页]

作者: 默数悲伤    时间: 2006-4-3 22:49     标题: 学习windows内存映射的小笔记

#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; }




欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2