闲暇时间随便写了个小例子,代码很简单,有注释
代码如下:
//利用内存文件映射,在2个进程中共享数据 //首先一个进程1创建 内存映射文件,并且输入想要通信的数据 //然后,另一个进程2Create的时候,会检测该映射文件是否存在,如果存在则映射文件,并且读取数据 #include <windows.h> #include <iostream> #include <string> int main() { //由于是为了在进程间共享数据,因此CreateFileMapping 的第一个参数 //为 INVALID_HANDLE_VALUE,那么系统会在页交换文件中创建映射对象, //而不是在磁盘上,这样会提升效率的 HANDLE hFilemap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4 * 1024, L"ShareData"); if(NULL != hFilemap) { if(ERROR_ALREADY_EXISTS == GetLastError()) { //同名的filemap已经存在,准备获得数据 std::cout << "Mapping already exists" << std::endl; CloseHandle(hFilemap); hFilemap = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, L"ShareData"); PVOID pView = MapViewOfFile(hFilemap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); if(pView != NULL) { std::wstring strShareData; strShareData = (PTSTR)pView; std::wcout << L"share data:" << strShareData << std::endl; } } else { //否则,则映射文件,并且写入数据 PVOID pView = MapViewOfFile(hFilemap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); if(NULL != pView) { std::cout << "please input share date" << std::endl; std::wstring wstrShareData; std::wcin >> wstrShareData; wcscpy((PWSTR)pView, wstrShareData.c_str()); } UnmapViewOfFile(pView); } } else { std::cout << "create file map failed" << std::endl; } system("pause"); return 0; }
http://blog.csdn.net/zicheng_lin/article/details/8151448