父子进程通信:
父子等有血缘关系的进程之间也可以通过mmap建立映射区来进行数据交互。但相应的,需要在建立映射区的时候指定对应的标志位参数flags:
MAP_PRIVATE:[私有映射] 父子进程各自独占映射区
MAP_SHARED:[共享映射] 父子进程共享映射区
结论:父子进程共享:1.打开的文件 2.mmap建立的映射区(必须以MAP_SHARED标志)
匿名映射区:
映射区的使用让父子进程之间的通行变的十分方便,但缺陷是,每次创建映射区一定要依赖一个文件。通常为了建立映射区要open一个文件,创建好了在unlink("文件名")、close(fd)文件,比较麻烦,所以可以直接使用匿名映射区来代替。在linux系统下可以在mmap的flags参数下添加MAP_ANONYMOUS 或 MAP_ANON。并且将fd参数改为-1。
特别注意MAP_ANONYMOUS 或 MAP_ANON是linux系统特有的宏,在类Unix系统中如无该宏定义,可以使用下两步来建立匿名映射区。
1、fd=open("/dev/zero",O_RDWR);
2、p=mmap(NULL,size,PROT_READ|PROT_WRITE,MMAP_SHARED,fd,0);