MMF(Memory Map File)
Posted 2009/04/24 01:34|
|
|
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
MMF(Memory Map File)
프로세스의 가상주소 공간을 Disk상에 존재하는 파일과 연결
"장점"
1. 파일 작업이 쉽다
2. 속도가 빠르다
3. 버퍼가 필요없다
4. IPC의 대표적 기법
- 같은 메모리 공간을 공유한다
일반적으로 메모리 맵 파일을 사용하는 순서는 아래와 같다.
1. Open the file by calling the CreateFile function.
2. Create File Mapping Object by calling the CreateFileMapping()
3. Creating a File View by calling the MapViewOfFile() of MapViewOfFileEx()
4. Reading and Writing From a File View
5. Destroy all file views in its address space by using the UnmapViewOfFile function
6. Closing a File Mapping Object by Calling the CloseHandle() Function
7. Close a File
#include <stdio.h>
#include <windows.h>
void main()
{
// MMF 1단계. 화일 Open 또는 생성
HANDLE hFile = CreateFile( "a.txt", GENERIC_READ |
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
// 에러 처리는 생략
// MMF 2단계. 화일 매핑 KO 생성
HANDLE hMap = CreateFileMapping( hFile, // 연결할 파일.
0, // 매핑 KO보안
PAGE_READWRITE,
0, 100, // 크기(64 bit, 0이면 화일 전체 크기)
// 0: 하위, 100: 상위 => 100 - 0 :100
0); // KO 이름. 필요없다면 0
// MMF 3단계. 매핑 커널 Object 를 사용해서 화일을 가상주소와 연결.
char *p = (char*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0,
0, // offset
0); // 크기(매핑 객체의 크기)
if(p == 0)
{
printf("Error\n");
}
else
{
printf("매핑된 주소 : %p\n", p);
strcpy(p, "hello"); // 결국 파일로 저장된다.
p[50] = 'a';
}
UnmapViewOfFile(p);
CloseHandle(hMap);
CloseHandle(hFile);
}
위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
- Filed under : 프로그래밍/MFC & Win32
- Comment Trackback

