#include "stdafx.h"
#include <iostream>
#include <assert.h>
#include <cstring>
#include <atlstr.h>
#include <Windows.h>
#include <WinBase.h>
HANDLE hMap;
HANDLE hAddress;
int iErrCode;
//第一步要定义所要共享的内容的结构体
#pragma pack(1)
struct TShareMem
{
int i;
char Data[256];
float a[12];
TShareMem() {
i = 234;
int m=0, n=0;
while (m< 256) {
Data[m++] = 'b';
}
while (n < 12) {
a[n++] = n * 3.14f;
}
}
};
char *starShare;
char *szBuf;
TShareMem* pShareMem;
void CreateMap()
{
//char * strBuf;
//创建共享内存,这个函数的最后一个参数即是创建的共享内存的名称
hMap = ::CreateFileMapping((HANDLE)-1, NULL, PAGE_READWRITE, 0, sizeof(TShareMem), _T("NewMap"));
if (hMap == NULL)
{
iErrCode = GetLastError();
std::cout << "不能创建内存映射文件!" << std::endl;
}
//写共享内存区,将内存映射为文件
pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
memcpy(pShareMem, starShare,sizeof(TShareMem));
}
void ReadMap(){
//打开刚刚创建的共享内存区
hMap = ::OpenFileMapping(FILE_MAP_WRITE, false, _T("NewMap"));
if (hMap == NULL)
{
iErrCode = GetLastError();
std::cout<<"不能定位内存映射文件块!"<<std::endl;
}
//读共享内存区
hAddress = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
//pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
if (hAddress == NULL)
std::cout<<"Can''t View Memory Map"<<std::endl;
szBuf = new char[sizeof(TShareMem)];
//拷贝共享内存区的内容
CopyMemory(szBuf, hAddress, sizeof(TShareMem));
TShareMem *result = (TShareMem*)szBuf;
std::cout << result->a[6] << std::endl;
}
int main()
{
int i;
starShare = new char[sizeof(TShareMem)];
TShareMem shm ;
shm.Data[0] = 'q';
memcpy(starShare, &shm, sizeof(TShareMem));
while (1) {
std::cin >> i;
if (i == 1) {
CreateMap();
}
else {
ReadMap();
}
}
return 0;
}
c++写内存
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本篇目的: c/c++中如何判断大小端的函数 c/c++中通过指针法,移位法获取多字节数据类型中的各个字节 jav...
- 在C++中,操作符 new 可以分配一片连续的内存空间。 例如: 课程录像 北京大学郭炜/刘家瑛老师,C++程序设...