c++写内存

#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;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容