파일매핑 순서
1) CreateFile API로 파일을 연다.
2) CreateFileMapping API로 그 파일에 대한 파일 매핑 객체를 생성한다.
3) MapViewOfFile API로 파일 매핑 객체의 뷰를 생성한다.
HANDLE CreateFileMapping( //반환값: 객체 핸들 , 실패시 = INVALID_HANDLE_VALUE 반환
HANDLE hFile, //파일 핸들
LPSECURITY_ATTIRBUTES lpAttrs, //보안 속성
DWORD flProtect, //접근 허가 , 액세스 타입(PAGE_READONLY,
PAGE_READWRITE,PAGE_WRITECOPY)
DWORD dwMaxSizeHigh, //매핑할 크기의 상위 32비트 , 둘다 0이면 전체파일
DWORD dwMaxSizeLow, //매핑할 크기의 하위 32비트 , 둘다 0이면 전체파일
LPCTSTR lpName); //객체명 , 첫번째 인수를 NULL로 주었을때 다른 프로세스와
동기화하기 위한 목적
뷰를 만들어 가상 주소 공간에 매핑! >>
매핑해서 파일 읽고 쓰려면 MapViewOfFile API로 '뷰'를 생성해야한다.
뷰는 실제 파일 내용이 매핑되는 가상 주소 영역.
LPVOID MapViewOfFile( //반환값: 맵핍항 프로그램상의 주소
HANDLE hFileMapObj, //파일 매핑 객체 핸들 ,
DWORD dwDesiredAccess, //필요한 접근 제한 액세스 타입(FILE_MAP_WRITE,FILE_MAP_READ,FILE_
MAP_ALL_ACCESS,FILE_MAP_COPY)
DWORD dwFileOfsHigh, //뷰를 실행할 범위의 시작 오프셋 상위 32비트
DWORD dwFileOfsLow, //뷰를 실행할 범위의 시작 오프셋 하위 32비트
SIZE_T dwBytesToMap); //뷰를 실행할 범위의 크기
뷰의 메모리에서 범위를 지정하여 파일 갱신>>
BOOL FlushViewOfFile ( //반환값: 처리 성공 여부
LPCVOID lpBaseAddr, //갱신할 영역 시작 주소
DWORD dwNumberOfBytes); //갱신할 영역 크기
뷰 해제하기 >>
BOOL UnmapViewOfFil( //반환값: 처리 성공 여부
LPCVOID lpBaseAddr); //해체할 뷰의 시작주소
파일 매핑 객체 자체가 불 필요하게 될 경우엔 CloseHandle API로 닫기!!
이름붙은 파일 매핑 객체 핸들을 다른 프로세스에서 가져와 사용하기 >>
HANDLE OpenFileMapping( //반환값: 객체 핸들
DWORD dwDesiredAccess, //필요한 접근 권한
BOOL bInheritHandle, //자식 프로세스에 상속할 것인가?
LPCTSTR lpName); //객체명