Linux高级编程之共享内存

1.基本概念

共享内存是IPC机制中的一种。顾名思义,它允许两个不相关的进程访问同一段内存,这时传递数据的一种非常有效的方式。

2.函数

1)创建打开共享内存

**创建/获取共享内存

        函数名:shmget

头文件:<sys/ipc.h><sys/shm.h>
函数作用:创建或者获取共享内存并返回其描述符id
函数原型:int shmget(key_t key,size_t size,int shmflg);
返回值:成功返回创建或获取到的共享内存的描述符,失败返回-1
参数:key:共享内存的键值(利用键值去获取与之相关的共享内存)
 size:共享内存的大小
 shmflg:打开标志,**如果使用了IPC_CREAT则会新创建一块共享内存

2)映射共享内存(一旦创建了一块共享内存,进程就可以调用shmat将其连接到它的地址空间中)

**映射共享内存
函数名:shmat
头文件:<sys/type.h> <sys/shm.h>
函数作用:把shmid指定的共享内存映射到进程的地址空间里
函数原型:void *shmat(int shmid,const void *shmaddr,int shmflg);
返回值:成功返回映射到进程空间之后的内存地址,失败的情况下返回-1
参数:shmid:用来指明要映射的共享内存的描述符
 shmaddr:用来指定映射之后的地址,通常为空,为NULL时表明让Linux系统自动的选择映射地址
 shmflg:标志

3)分离共享内存(当对共享存储段的操作已经结束时,则调用shmdt脱离该段)

**分离共享内存
函数名:shmdt
头文件:<sys/type.h> <sys/shm.h>
函数作用:从调用进程的地址当中断掉与共享内存的联系
函数原型:int shmdt(const void *shmaddr);
返回值:成功返回0,失败返回-1
参数:shmaddr:用来指明要断开的共享内存的映射地址。

4)删除共享内存

**删除共享内存
函数名:shmctl
头文件:<sys/ipc.h><sys/shm.h>
函数原型:int shmctl(int shmid,int cmd,struct shmid_ds*buf);
函数作用:控制共享内存
返回值:失败返回-1,成功:根据不同的操作返回不同的值
参数:shmid:用来指明控制的是哪块共享内存
 cmd:决定执行什么样的控制操作(eg:IPC_RMID(表示删除))
 buf:是获取Linux中描述共享内存的shmid_ds结构,基本不使用赋NULL
3.两个进程,write(用户通过键盘输入,放入共享内存)与read(从共享内存中将数据取出并打印出来)  
 
 
 




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值