内存映射的用法

内存映射的作用之一是可以在进程之间进行通信,

鉴于自己当时搜索资料时的痛苦,以及有很多网友虽然知道有这几个函数,但是不知道怎么结合用,下面我列出了一个应用的例子:

SData是一个结构体,

创建内存映射

// mapping data

int iLengByte = sizeof(SData);

LPBYTE lpData;

HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0,iLengByte, "S_DATA");

if (hMap != NULL)

{

       lpData = (LPBYTE)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);

       if (lpData == NULL)

       {

              CloseHandle(hMap);

              hMap = NULL;

              return;

       }

       SData Data;      

       memcpy(lpData,(LPBYTE)(&Data),iLengByte);//copy head data to mapping file  

}

//free the resource

if (hMap != NULL)

{                  

       UnmapViewOfFile(lpData);

       lpData = NULL;

       CloseHandle(hMap);

       hMap = NULL;

}           

 

 

打开内存映射并使用

struct SData data;

HANDLE m_hMap = OpenFileMapping(FILE_MAP_READ, FALSE, "S_DATA");

if (m_hMap == NULL)  return;

LPBYTE lpData = (LPBYTE)MapViewOfFile(m_hMap,FILE_MAP_READ,0,0,0);

if (lpData == NULL)

{

       CloseHandle(m_hMap);

       m_hMap=NULL;

       return;

}

memcpy(&data, (SData*)(lpData), sizeof(SData));//copy the head data

//release mem

UnmapViewOfFile(lpData);

lpData = NULL;

CloseHandle(m_hMap);

m_hMap = NULL; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值