[1장] 메모리맵핑파일 - CreateFileMapping, MapViewOfFile, UnmapViewOfFile
![]() ![]() 2009/11/23 15:05
|
[메모리 매핑파일]
HANDLE CreateFileMapping(HANDLE hFile, // (1)
LPSECURITY_ATTRIBUTES lpAttributes, //(2)
DWORD flProtect, // (3)
DWORD dwMaximumSizeHigh, // (4)
DWORD dwMaxImumSizeLow, // (5)
LPCTSTR lpName //(6)
);
위의 함수가 매모리매핑 파일을 만드는 함수이다..
위의 함수 사용시 매모리맵파일이 생성은 되지만 실제로 매모리에 연결되어 있진않다.
연결을 하려면 MapViewOfFile 이라는 함수를 써야지 그 때부터 메모리에 연결이 된다.
일단위 함수의 설명을 들어보자
목적 및 하는 일 : MMF라는 커널 객체를 만들고 그 핸들을 리턴한다.
메모리매핑파일을 만들수있는 기본정보들을 갖고 있는 커널객체를 만들고 그 핸들을 리턴한다.
인자설명 :
(1) hFile : CreateFile 함수로 해당파일을 열고 리턴받은 값.. (CreaqteFile 의 리턴값 파일핸들) 파일핸들을 인자로 넘겨준다.. , (어떤파일을 파일매핑할건지 정하는거다.)
(2) lpAttributes : 솔직히 잘 모르겠는데 .. 보통 이값은 NULL로 줬다. (아시는 분은 좀 알려주세여^^)
(3) flProtect : 읽기 전용으로 할건지 읽기 쓰기를 할건지 설정하는 옵션이다. ex) PAGE_READONLY, PAGE_READWRITE 등등
(3) dwMaximumSizeHigh : 매핑할 범위를 지정하는 상위 4바이트 (용량이 작은 범위라면 이곳에 0을 주고 그 다음 인자에 파일크기 및 원하는 범위를 지정한다.)
(4) dwMaximumSizeLow : 매핑할 범위 지정하는 하위 4바이트
(5) lpName : 파일매핑 객체이기 때문에 객체에 이름을 부여할때 쓴다. 보통 NULL을 주고 이름을 붙이도 다른곳에서 참조할때는 이름을 문자열로 이름을 지정한다.
사용예제 ) CreateFileMapping(hSource, NULL, PAGE_READONLY, 0, dwFileSize, NULL);
CreateFileMapping(hTarget, NULL, PAGE_READWRITE, 0, dwFileSize, NULL);
------------------------------------------------------------------------------------------------------------------------------
LPVOID MapViewOfFile(HANDLE hFileMappingObject, // (1)
DWORD dwDesiredAccess, // (2)
DWORD dwFileOffsetHigh, //(3)
DWORD dwFileOffsetLow, // (4)
SIZE_T dwNumberOfBytesToMap // (5)
);
목적 및 하는 일 : CreateFileMapping 함수로 만든 MMF 객체를 대상으로 실제 메모리번지에 연결을 하여 메모리 매핑파일을 만든다.
메모리 매핑파일 만들고 그 메모리의 시작번지를 리턴한다.
인자설명 :
(1) hFileMappingObject : CreateFileMapping 함수로 리턴받은 핸들값을 인자로 준다.
(2) dwDesireAccess : 접근권한을 설정하는 것으로 FILE_MAP_READ, FILE_MAP,WRITE 등으로 옵션을 준다.
(3) dwFileOffsetHigh : 메모리 주소가 연결될 크기 상위 4바이트
(4) dwFileOffsetLow : 메모리 주소가 연결될 크기 하위 4바이트
(5) dwNumberOfBytesToMap : 오프셋으로 부터 원하는 크기를 정한다.
사용예제 ) MapViewOfFile(hMapSource, FILE_MAP_READ, 0, dwAs, dwLen);
MapViewOfFile(hMapTarget, FILE_MAP_WRITE, 0, dwAs, dwLen);
------------------------------------------------------------------------------------------------------------------------------
해당함수들을 사용후에는 해제 해주어야 하는데
CreateFileMapping 함수 같은 경우 파일 핸들을 리턴함으로
CloseHandle(리턴값); 으로 해제하고
MapViewOfFile 함수 같은 경우는 메모리 주소를 리턴함으로
UnmapViewOfFile(리턴값); 으로 해제한다.
------------------------------------------------------------------------------------------------------------------------------
WRITTEN BY
- 정현석
이것저것 끄적끄적....