前面我们介绍了什么是IPC,以及IPC中得管道,现在我们来介绍IPC得另一种方式mmap
原理:将一个文件或者其它对象映射进内存。
1.使用普通文件提供的内存映射 【一般用于无血缘关系进程】
2.【一般用于有血缘关系的进程】使用特殊文件提供匿名内存映射,【MAP_ANONYMOUS or MAP_ANON 在 UINX中是没有的但是呢 UNIX中也有 匿名映射的方式(linux中也可以这么用)就是用这两个文件/dev/zero, /dev/null(这两个稍后在匿名映射中介绍)】
我们先来介绍介绍关于mmap的 API
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:代表将文件中多大的部分映射到内存。
参数prot:映射区域的保护方式。可以为以下几种方式的组合:
- PROT_EXEC 执行
- PROT_READ 读取
- PROT_WRITE 写入
- PROT_NONE 不能存取
参数flags:影响映射区域的各种特性。必须要指定MAP_SHARED 或MAP_PRIVATE。
- MAP_SHARED - 映射区域数据与文件对应,允许其他进程共享
- MAP_PRIVATE - 映射区域生成文件的copy,修改不同步文件
- MAP_ANONYM