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

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

by i.got.it 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.

댓글



 

비트코인




암호화폐       외환/나스닥/골드       암호화폐/외환/나스닥/골드 암호화폐/외환/나스닥/골드   암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)     롤오버 이자 없는 스왑프리계좌
( 스왑프리 암호화폐도 거래 가능 )    
MT4, MT5 , cTrader 모두 지원     FTMO 계좌 매매운용. MT4,MT5