이름
mmap, munmap - 
파일이나 장치를 메모리로 대응시키거나 대응을 푼다. 
사용법
#include 
#include 
#ifdef _POSIX_MAPPED_FILES 

void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset); 

int munmap(void *start, size_t length); 

#endif 

설명
mmap 
함수는 fd로 지정된 파일(또는 다른 객체)에서 offset을 시작으로 length 바이트만큼을 start 주소로 대응시키도록 한다. 이 주소는 단지 그 주소로 했으면 좋겠다는 정도이며, 보통 0으로 지정한다. mmap는 지정된 영역이 대응된 실제 시작 위치를 반환한다. prot 인자는 원하는 메모리 보호 모드를 설정한다. 해당 비트는 다음과 같다. 
PROT_EXEC 
페이지는 실행될 수 있다. 
PROT_READ 
페이지는 읽을 수 있다. 
PROT_WRITE 
페이지는 쓰여질 수 있다. 
PROT_NONE 
페이지는 접근될 수 없다. 
flags 
인자는 대응된 객체의 타입, 대응 옵션들, 대응된 페이지 복사본에 대한 수정이 그 프로세스에만 보일 것인지 다른 참조하는 프로세스와 공유할 것인지를 설정한다. 해당 비트들은 다음과 같다. 

MAP_FIXED 
지정된 주소 이외의 다른 주소를 선택하지 않는다. 지정된 주소가 사용될 수 없다면, mmap은 실패할 것이다. 만일 MAP_FIXED가 지정되면, start는 페이지 크기의 배수이어야 한다. 이 옵션은 사용하지 않는 것이 좋다. 
MAP_SHARED 
이 객체를 대응시키는 다른 모든 프로세스와 이 대응 영역을 공유한다. 
MAP_PRIVATE 
개별적인 copy-on-write 대응을 만든다. (다른 프로세스와 대응 영역을 공유하지 않는다.) 
MAP_SHARED
 MAP_PRIVATE 중 하나는 반드시 명시해야 한다. 

위 세 플래그는 POSIX.1b에 규정되어 있다.(공식적으로 POSIX.4) 또한 리눅스에는 MAP_DENYWRITE, MAP_EXECUTABLE 그리고 MAP_ANON(YMOUS)도 있다. 

munmap 
시스템 콜은 지정된 주소 공간에 대한 대응을 푼다. 범위내의 주소에 대한 참조 계수를 늘려서 유효하지 않는 메모리 참조로 만든다. 



반환값
성공시, mmap은 대응된 영역의 포인터를 반환한다. 에러시, MAP_FAILED(-1)이 리턴되며, errno는 적당한 값으로 설정된다. 성공시, munmap 0을 리턴하며, 실패시 -1이 리턴되며, errno가 설정된다 (보통EINVAL이 설정된다). 
에러
EBADF 
fd
가 유효한 파일 기술자가 아니다 (그리고 MAP_ANONYMOUS가 설정되어 있지 않다). 
EACCES 
MAP_PRIVATE
가 설정되었지만, fd가 읽을 수 있도록 열려있지 않다. 또는 MAP_SHARED PROT_WRITE가 설정되었지만, fd가 쓸 수 있도록 열려있지 않다. 
EINVAL 
start
 length offset가 적당하지 않다 (, 너무 크거나 PAGESIZE 경계로 정렬되어 있지 않다). 
ETXTBUSY 
MAP_DENYWRITE
가 설정되었으나 fd로 지정된 객체가 쓰기 위해 열려있다. 
EAGAIN 
파일이 잠겨있거나, 너무 많은 메모로가 잠겨있다. 
ENOMEM 
사용할 수 있는 메모리가 없다. 

호환
SVr4, POSIX.1b (formerly POSIX.4), 4.4BSD. Svr4 
문서에는 ENXIO ENODEV 에러 코드가 추가되있다. 
관련 항목
getpagesize(2), msync(2), shm_open(2), B.O. Gallmeister, POSIX.4, O'Reilly, 
페이지. 128-129 389-391. 
역자
정강훈 , 2000 5 14

'기타' 카테고리의 다른 글

[Hudson] 자동 빌드 설정 방법  (0) 2012.08.10
VPN  (0) 2011.05.03
SVN GUI TOOL[SVN Tool - RapidSVN 사용법]  (0) 2011.02.09
SVN  (0) 2011.02.09
Source Insight 3.5 에서 한글 주석 읽는 방법  (0) 2011.01.16

+ Recent posts