- 以页为单位分配映射内存区
#include <sys/mman.h>
void *mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void* addr, size_t length);
-
addr: 映射文件的大概位置,NULL表示由操作系统自己指定
length: 映射内存长度
fd: 被映射文件所对于的文件描述符
offset: 映射文件起始位置,即文件开头的偏移
prot: 映射内存的使用权限 1)PROT_NONE 不允许任何操作; 2) PROT_READ 可读取映射内存区的数据; 3) PROT_WRITE 可写入; 4) PROT_EXEC 可执行
flag: 映射内存模式 有MAP_SHARED、MAP_PRIVATE、MAP_ANONYMOUS、MAP_FIXED
- 实例
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int main() {
int fd = open("my.txt", O_RDWR);
if (fd < 0) {
perror("open");
exit(1);
}
char *p = (char *)mmap(NULL, 10, PROT_WRITE, MAP_SHARED, fd, 0);
p[0] = 'H';
munmap(p, 10);
return 0;
}