第一个是上一篇博客中用mmap实现任意两个进程间相互通信,前几篇博客也用管道实现了进程间通信
这里有个问题,管道是基于缓冲区环形队列的,实验也表明读过的数据不能在读利用命名管道实现任意进程间的通信
那么mmap多个读写操作时会是什么情况呢?
一写多读
多写一读
这里代码要改变一下
mmap_w.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/mman.h> #include <unistd.h> #include <errno.h> struct student { int id; int age; char name[256]; }; void sys_err(const char *str){ perror(str); exit(1); } int main(int argc,char *argv){ struct student stu={1,23,"xiaoming"}; struct student *p; int fd; //fd=open("test_map",O_RDWR|O_CREAT|O_TRUNC,0664); fd=open("test_map",O_RDWR); if(fd==-1)sys_err("open error"); ftruncate(fd,sizeof(stu)); p=mmap(NULL,sizeof(stu),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); if(p==MAP_FAILED)sys_err("mmap error"); close(fd); while(1){ memcpy(p,&stu,sizeof(stu)); stu.id++; sleep(2); } munmap(p,sizeof(stu)); return 0; }
mmap_r.c不变,可以看前一篇文章