内存映射区
(1)What
每一个进程都有一块映射区,该映射区位于进程的用户区(用于加载动态库的区域),也就是说进程通过内存映射区进行通信的过程中是两块映射区之间的信息传输
(2)Why
实现进程通信,也可用于实现高效地文件拷贝
(3)How
由于每个进程的地址空间相互独立,进程之间不能直接访问对方的映射区,在实践中,通常将需要进行通信的进程同同一个磁盘文件关联起来,进程间通过磁盘文件这一桥梁进行交互。
代码示例:
#include <mman.h>
#include <fcntl.h>
#include <stdlib.h>
#include <uinstd.h>
//打开磁盘文件作为桥梁
int fd = open("./a.txt", O_WRONLY);
//创建内存映射区
void *pt = mmap(NULL, 4096, PROT_WRITE, fd, 0);
//向内存映射区中写入数据
char ptrMsg[1024] = " What shall I do? Only heaven knows.";
memcpy(pt, ptrMsg, strlen(ptrMsg)+1);
//关闭当前进程的内存映射区
munmap(pt, 4096);
close(fd);
另外设计的一个进程可以不断地向关联了a.txt的内存映射区中读取数据,即可实现两个进程之间的通信