linux下两个进程以相同的键值创建共享内存,得到地址不同,Linux编程练习 --SystemV共享内存...

1.共享内存段的基本概念

共享内存就是由几个进程共享一段内存区域,可以说是IPC最快形式,因为它无须任何中间操作,它只是把内存段直接映射到调用进程的地址空间中。共享内存段通信的使用方式和消息通信是类似的。首先用shmget系统调用为进程创建一个共享内存段,当需要该共享内存时,利用系统调用shmat将申请的共享内存段映射到进程的私有空间中,之后进程可以用与访问其他虚拟地址空间相同的方法对它进行访问了。多个进程对同一个共享内存访问是互斥的,但互斥控制要与共享内存相关联的所有进程自己去完成。所以共享内存经常和信号量使用。

2.共享内存的系统操作

A.创建一段共享内存系统调用语法:#include

int shmget(key_t key,int size,int flags);

key 共享内存的键值,可以为IPC_PRIVATE,也可以用整数指定一个

size 共享内存字节长度

flags 共享内存权限位。

shmget 调用成功后,如果key 用新整数指定,且flags 中设置了IPC_CREAT

位,则返回一个新建立的共享内存段标识符。如果指定的key 已存在则返回与key

关联的标识符。不成功返回-1

B.令一段共享内存附加到调用进程中的系统调用语法:

#include

char *shmat(int shmid, char *shmaddr,int flags)

shmid 由 shmget 创建的共享内存的标识符

shmaddr 总为0,表示用调用者指定的指针指向共享段

flags 共享内存权限位

shmat 调用成功后返回附加的共享内存首地址

C.令一段共享内存从到调用进程中分离出去的系统调用语法:</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值