1. createFile
2. 创建内存映射文件
HANDLE CreateFileMapping(
HANDLE hFile, // handle to file
LPSECURITY_ATTRIBUTES lpAttributes, // security
DWORD flProtect, // protection
DWORD dwMaximumSizeHigh, // high-order DWORD of size
DWORD dwMaximumSizeLow, // low-order DWORD of size
LPCTSTR lpName // object name
);
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);
dwFileOffsetHigh + dwFileOffsetLow 之和须得是64K的整数倍.
UnMapViewofFile(
);
closehandle 内存映射
closehandle 关闭文件
/ 磁盘中创建一个文件
HANDLE hFile = CreateFile(L"c:/map.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// 在内核中创建一个内存映射文件结构,同时将硬盘文件扩充至1M
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 1024 * 1024, L"ysd");
// 将硬盘文件和本进程的共享端的地址空间建立映射关系
char * pszText = (char*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
strcpy(pszText, "HELLO map");
printf("%s\n",pszText);
// 将硬盘文件和本进程的共享段的地址空间断开映射关系
UnmapViewOfFile(pszText);
//删除内存映射文件这个内核结构
CloseHandle(hMap);
CloseHandle(hFile);
-------------------------------
OpenFileMapping()
mapViewOfFile()
printf();
UnMapViewofFile();
closehandle();
----------------------------------------------------------exmaple --------------------------------------------
写:
// 内存映射写.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hFile = CreateFile(L"C:/ysd.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 1024 * 1024, L"ysd");
char* p = (char*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);// 将该映射文件同本进程关联起来
char szText[256] = "你好,我的名字是袁苏东.";
strcpy(p, szText); // 向映射文件写入数据
UnmapViewOfFile(p); // 解除映射
getchar(); // 阻塞,等待另外一个进程读取数据
CloseHandle(hMap); // 关闭文件映射的内核结构,该步一旦调用另外进程将不能再继续访问
CloseHandle(hFile);
return 0;
}
读:
// 文件映射读.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hMap = OpenFileMapping(FILE_MAP_READ, FALSE, L"ysd");
char* p = (char*)MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
char szText[256] = { 0 };
strcpy(szText, p);
printf("读到的数据是:%s", szText);
UnmapViewOfFile(hMap); // 与本进程断开
CloseHandle(hMap);
system("pause");
return 0;
}