한 걸음씩..

서로 다른 프로세스 끼리 데이터 공유하기 (Memory Mapped File) 본문

프로그래밍

서로 다른 프로세스 끼리 데이터 공유하기 (Memory Mapped File)

반엘 2013. 7. 15. 10:19


서로 다른 프로세스 끼리 (서로 다른 어플리케이션 또는 서비스)

데이터를 공유하는 방법 중 하나로 MMF(Memory Mapped File)을 사용할 수 있다!!!

 

1. 첫 번째 프로세스

 
// "SH_MEM"라는 이름의 크기가 1024 이며, 읽고 쓰기가 가능한 상태로 이름의 메모리 객체를 생성한다.
HANDLE hMapping = ::CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0,
1024, "SH_MEM");
 
// 생성된 메모리 객체에 접근하여 시작 위치를 얻어온다.
LPVOID lpData = ::MapViewOfFile (hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 1024);
 

2. 두 번째 프로세스
 
// 이미 생성된 "SH_MEM"라는 메모리 객체를 Open 한다.
HANDLE hMapping = ::OpenFileMapping (FILE_MAP_ALL_ACCESS, FALSE, "SH_MEM");
 
// Open된 메모리 객체에 접근하여 시작 위치를 얻어온다.
LPVOID lpData = ::MapViewOfFile (hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 1024);
 
3. 모든 프로세스
 
// 모든 작업이 끝난 후 접근했던 메모리객체를 연관성을 끊는다.
::UnmapViewOfFile (lpData);
 
// 공유메모리를 삭제한다.
::CloseHandle (hMapping);

 

 

http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=322

 

 

ps. 서비스와 어플리케이션이 데이터를 주고 받으려면

Global Name을 사용해야 하며 어플리케이션 쪽에서 MMF 를 만들고 서비스에서 열어야 한다.