MMAP
Section: 리눅스 프로그래머 매뉴얼 (2)
Updated: 1996년 4월 12일
Index
Return to Main Contents
이름
mmap, munmap - 파일이나 장치를 메모리로 대응시키거나 대응을 푼다.
사용법
#include <unistd.h>
#include <sys/mman.h>
#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.
역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 5월 14일
Index
- 이름
-
- 사용법
-
- 설명
-
- 반환값
-
- 에러
-
- 호환
-
- 관련 항목
-
- 역자
-
This document was created by
man2html,
using the manual pages.
Time: 08:07:00 GMT, March 25, 2004