您的位置:首页 > 其它

利用内存映射文件在进程间共享数据

2012-11-06 17:24 423 查看
闲暇时间随便写了个利用内存映射文件在进程间共享数据小例子,代码很简单,有注释

代码如下:

[cpp]

//利用内存文件映射,在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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: