mmap
prototype
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
manual
mmap(2) - Linux manual page
description
mmap()
은 해당 함수를 호출한 프로세스의 Virtual Address space의 새 매핑을 생성합니다.
- 해당 매핑의 시작 주소에
addr
인자를 활용하며, length
는 매핑의 크기를 정의합니다. (항상 0보다 커야합니다.)
- 메모리에 매핑을 하는 경우는 anonymous mapping 이라고 하며, 이와 반대 케이스로 파일을 메모리에 매핑을 하는 경우에는 file mapping이다. 이는
flag
를 통해서 나타낼 수 있다.
- 파일이나 여타 객체에 대한 매핑을 하는 경우,
length
를 통하여 파일의 offset
부터 시작하여 초기화를 진행한다. 이 때 offset
은 page
사이즈의 배수여야만 한다.
mmap()
이 값을 반환하고 난 뒤, 해당 fd
의 경우 mapping의 유효성을 검증하는 과정 없이 즉시 closed 될 수 있다.
prot
인자는 메모리 보호에 대한 내용을 기술하는 역할을 한다. 이는 file
의 open
mode
와 충돌하면 안된다.
flags
인자는 매핑이 다른 프로세스의 같은 메모리 공간에 visible 하게 할 지, 업데이트가 파일에 전달되는지의 여부를 결정한다.
return value
- 매핑이 성공했을 때,
mmap()
은 매핑된 공간의 주소를 반환합니다.
- 매핑이 실패했을 때는
MAP_FAILED (== (void *) -1)
이 반환되며, errno
를 통해서 에러를 명시합니다.
parameters
void *addr
- Virtual Address Space에 새 매핑의 시작 주소를
addr
으로 지정합니다.
NULL
인 경우 새 매핑에 사용하는 page-aligned 된 address를 커널이 선정합니다.