linux系统编程 mmap延伸

父子进程通信:

父子等有血缘关系的进程之间也可以通过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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值