int fd = open(char *path,int mode)
void *mptr = mmap(void *addr,size_t len,int prot,int mode,ssize_t fd,size_t offset);
addr ------- NULL
len ------- 4k的整数倍
prot ------- PROT_READ PROT_WRITE
mode ------- MAP_SHARED MAP_PRIVATE
fd ------- 文件描述符
offset------ 偏移量(距离映射区首地址的字节数)
close(fd) //关闭文件描述符
munmap(void *mptr,size_t len) //关闭内存映射区
思考:既然是兄弟,或者父子进程间进行通信,我们有着一样的数据,为什么一定要靠着打开一个文件,然后映射到内存,来进行通信呢?它们之间也不需要被映射到内存中的文件中的数据呀,这样做是是不是多此一举?于是就想我们可以请求操作系统在内存中,给他们开辟一块固定大小的空间,它们使用这块内存的地址,来作为桥梁进行通信,这就是匿名内存映射区
void *mptr = mmap(NULL,len,PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANON,-1,offset);
//注意
mode参数必须要有一个参数是 MAP_ANON
文件描述符可以填-1
len 长度需要指定出来,4k的整数倍
munmap(void *ptr,int len);
注意:此种内存映射区,存在局限性,只能用于进行有血缘关系之间的进程进行通信
int fd = open("filename",O_RDWR | O_CREAT,0664)
truncate(fd,len) //参数是文件描述符和长度
void *mptr = mmap(void *addr,int len,.......)