linux高级学习9

一.共享内存

特点:

  • 其在进程间共享数据的方法中是最快的
  • 要注意对给定存储区访问时进行互斥

1.共享内存的API

(1)获取共享内存标识符
在shell中使用
ipcs -m进行查看共享内存
ipcrm -m shmid删除共享内存

#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key,size_t size,int shmflg);

key:IPC键值
size:共享内存的大小
shmflg:标识函数行为及共享内存的权限
   IPC_CREAT:如果不存在就创建
   IPC_EXCL:如果已经存在则返回失败
   位或权限位:共享内存位或权限位后可以设置共享内存的访问权限。

(2)虚拟内存和物理内存的映射

#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid,const void *shmaddr,int shmflg);

shmid:共享内存标识符
shmaddr:共享内存映射地址,推荐位NULL
shmflg:共享内存段的访问权限和映射条件
   0:共享内存具有可读可写权限
   SHM_RDONLY:只读
   SHM_RND:只有当shmaddr非空才有效;

(3)解除当前进程的映射关系

#include <sys/types.h>
#include <sys/shm.h>
//将共享内存映射地址添加到其中进行解除
int shmdt(const void *shmaddr);

(4)共享内存控制

#include <sys/types.h>
#include <sys/shm.h>
int shmctl(int shmid,int cmd,struct shmid_ds *buf);

shmid:共享内存标识符
cmd:函数功能的控制
   IPC_RMID:删除
   IPC_SET:设置shmid_ds参数
   IPC_STAT:保存shmid_ds参数
   SHM_LOCK:锁定共享内存段
   SHM_UNLOCK:解锁共享内存段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值