内存映射
1.常用方法
#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);
成功,返回存储器起始地址;失败,返回MAP_FAILED
addr:指定映射存储区的起始地址,通常设置为0,表示由系统选择起始地址。
length:存储地址大小。
prot:映射存储区的保护要求。PROT_READ,存储器可读;PROT_WRITE,存储区可写;PROT_EXEC,存储区可执行;PROT_NONE,存储区不可访问。保护要求不能超过文件open模式访问权限。
flags:MAP_SHARED,表示对映射区的修改,相当于对文件的修改;MAP_PRIVATE,表示对映射区的修改,只是对文件副本的修改,原文件不变。一般设置flags为MAP_SHARED。
fd:映射存储区对应的文件。
offset:偏移量。
2.实例
1.创建两个进程,使用映射内存读写文件中的数据。
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <wait.h>
#include