본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

다른 프로그램과 메모리공유 - 메모리 맵 파일.

by 리치굿맨 2015. 6. 6.

 

 

개요

 

다른 프로그램(프로세스)들이 동일한 메모리를 고유하는 "메모리맵파일(=공유메모리)" 활용법 정리.


요점.

1. ::CreateFileMapping 으로 공유메모리 생성. ::OpenFileMapping 으로 이미 생성된 공유메모리 열기.

2. ::MapViewOfFile 로 상기1의 공유메모리 포인터 받아서 데이터 읽기,쓰기.




 

 

  

 

코드구현예

 

상황.

프로그램A에서 메모리맵파일을 생성하고 float형 데이터 기록하고, 프로그램B에서는 A에서 생성한 메모리맵파일에 접근하여 데이터를 읽는다.

 

프로그램A

1. 메모리맵파일 생성. 함수 CreateFileMapping

2. 1에서 생성된 메모리 포인터 받기. 함수 MapViewOfFile, 함수인자로 FILE_MAP_WRITE 로 하여 쓰기 모드로 설정.

프로그램B

3. 1에서 생성된 메모리맵파일 오픈하기. 함수 OpenFileMapping.

4. 3에서 오픈된것의 포인터 받기. 함수 MapViewOfFile. 함수인자로 FILE_MAP_READ 로 하여 읽기모드로 설정.


아래 프로그램A에서는 float 형 최대 512개를 저장하기위한 메모리맵파일을 생성하고 데이터를 저장하는 것을 보이고 있다.

코드에서 붉은색 문자열은 프로그램A,B에서 일치되어야 한다.

 

프로그램A 

 프로그램B

.h에서

HANDLE hMapFile;

float* pMapView;

 

.cpp 에서

 

///공유메모리 생성.

hMapFile = ::CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(float)*512,"Share_MyMemory");

 

/// 공유메모리 포인터받기.

pMapView = (float*)MapViewOfFile(hMapFile, FILE_MAP_WRITE,0,0,0);

 

/// 공유메모리에 데이터기록.

for(int i=0;i<512;i++)

{

 pMapView[i] = 123.f;

}

 

.h에서

HANDLE hMapFile;

float* pMapView;

 

 

.cpp 에서

 

/// 공유메모리 열기.

hMapFile = ::OpenFileMapping(FILE_MAP_READ,FALSE,"Share_MyMemory");

 

/// 공유메모리 포인터 얻기.

pMapView = (float*)MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);

 

/// 공유메모리에 기록된 데이터 활용.

for(int i=0;i<512;i++)

{

 my_temp = pMapView[i];

}

 

 

 

 

 

 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

///320.

태그

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT