引用:#include
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
mmap把打开的磁盘文件fd从offset开始,映像到内存start处,大小为length。成功返回该映像的指针,失败返回-1并设置相应的errno。
映像可选的保护模式prot包括:PROT_NONE, PROT_READ, PROT_WRITE, PROT_EXEC等。
映像的可选属性flags包括:MAP_FIXED, MAP_PRIVATE, MAP_SHARED,MAP_ANON, MAP_DENYWRITE, MAP_GROWSDOWN, MAP_LOCKED等。
其中MAP_PRIVATE或者MAP_SHARED两者必须且只能选择一个,其它都是可选值,用逻辑或添加。MAP_FIXED强制使用start指定的地址,否则执行失败,如果没有使用这个选项,则mmap在start不可用时会尝试把mmap放到其它地方。MAP_LOCKED只用在root权限的进程才能使用,以防止锁定所有可用内存的恶意攻击。
引用:#include
int munmap(void *start, size_t length);
munmap解除从start开始大小为length个字节的内存映像并释放内存,如果在munmap之后试图继续访问start,将会产生段错误。在进程终止运行时,所有的内存映像会被自动解除。
引用:#include
int msync(const void *start, size_t length, int flags);
msync把从start开始的大小为length个字节的内存映像同步到磁盘,flags包括:MS_ASYNC, MS_SYNC, MS_INVALIDATE。成功返回0,失败返回-1并设置errno。
引用:#include
int mprotect(const void *start, size_t len, int prot);
mprotect修改start开始的大小为len个字节的内存映像的保护模式为prot。成功返回0,失败返回-1并设置errno。
引用:#include
int mlock(const void *start, size_t len);
int munlock(void *start, size_t len);
int mlockall(int flags);
int munlockall(void);
以上函数对指定的内存映像加锁和解锁,其中mlockall的flags包括MCL_CURRENT和MCL_FUTURE。只有root权限才能使用它们。
引用:#include
void *mremap(void *old_addr, size_t old_len, size_t new_len, unsigned long flags);
mremap用指定的flags把地址在old_addr的内存映像大小从old_len调整为new_len,flags如果为MREMAP_MAYMOVE则调整此内存映像的地址。成功返回新地址,失败返回NULL。