c/c++

MMF(memory mapping file)

밀크빵 2012. 8. 16. 16:21

MMF 구현 과정

1. 파일 개방 - CreateFile 함수를 호출하여 파일을 열고 해당 파일의 핸들을 얻어 이 핸들로 파일을 조작한다.

2. 파일 연결 오브젝트 생성 - CreateFileMapping 함수를 호출하여 메모리에 연결할 파일 정보를 담고 있는 커널 오브젝트를 생성한다.

3. 가상 메모리에 파일 연결 - MapViewOfFile 함수를 호출하여 가상메뫼와 파일을 연결한다.  MapViewOfFile 함수의 반환되는 포인터를 가지고 메모리에 접근하면, 메모리가 변경시 파일에도 변경된 내용이 자동으로 반영된다. 



void main()

{

HANDLE hFileRead = INVALID_HANDLE_VALUE;

HANDLE hFileMap = INVALID_HANDLE_VALUE;

char *str ;


hFileRead = CreateFile("test.txt",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);


if(hFileRead==NULL)

printf("!CreateFile\n");

hFileMap = CreateFileMapping(hFileRead,NULL,PAGE_READWRITE,0,100,NULL);

if(hFileMap == NULL)

printf("!hFileMap\n");


str = (char *) MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);

if(str == NULL)

printf("!str");

// strcpy(str,"hello");

printf("%s\n",str);

// strcpy(str,"wpets'pdghsdo;fhasdjkfhasflkjas;dfdsaojgs;djgsakdlfsfa");


UnmapViewOfFile(str);

CloseHandle(hFileRead);

CloseHandle(hFileMap);




}