实质上mmap是内核借助文件帮我们创建了一个映射区,多个进程之间利用该映射区完成数据传递,由于内核空间多进程共享,因此无血缘关系的进程之间,也可以使用mmap来进行通信,只要设置相应的标记位flag即可。标记位使用MAP_SHARED.
实例代码:
写入进程代码:
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/mman.h>
#include<string.h>
struct STU{
int id;
char name[20];
char sex;
};
void sys_err(char *str){
perror(str);
exit(1);
}
int main(int argc, char *argv[]){
int fd;
struct STU student = {10, "xiaoming", 'm'};
char *mm;
if(argc < 2) {
printf("./a.out file_shared\n");
exit(1);
}
fd = open(argv[1], O_RDWR | O_CREAT, 0664);//打开或创建文件
ftruncate(fd,sizeof(student)); //将fd指定为student大小的文件长度
mm =(char*)mmap(NULL, sizeof(student),PROT_READ