Rechercher une page de manuel
mmap
Langue: ko
Version: 1996년 4월 12일 (fedora - 25/11/07)
Section: 2 (Appels système)
이름
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일
fifteen e's,
seven f's, four g's,
six h's, eight i's,
four n's, five o's,
six r's, eighteen s's,
eight t's, four u's,
three v's, two w's,
three x's.
-- Sallows, Lee
seven f's, four g's,
six h's, eight i's,
four n's, five o's,
six r's, eighteen s's,
eight t's, four u's,
three v's, two w's,
three x's.
-- Sallows, Lee
Contenus ©2006-2013 Benjamin Poulain
Design ©2006-2013 Maxime Vantorre