Manpages

이 름

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

startlengthoffset가 적 당 하 지 않 다 (즉 , 너 무 크 거 나 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 [AT] soback.net>, 2000년 5월 14일