LinuxC之进程---共享内存

1.定义和作用:
共享内存是多个进程之间共享的一段内存段。来进行内存中的数据交换。
2.共享内存段对应的struct结构

struct shmid_ds{
struct ipc_perm shm_perm;   //权限相关的结构体
int shm_segsz;              //内存段的总大小
ushort shm_lkcnt;
pid_t shm_cpid;             //创建该内存段的线程
pid_t shm_lpid;             //最近使用该内存的线程
ulong shm_nattach;          //内存段被附加的总数
time_t shm_atime;           //内存段最近被附加的时间
time_t shm_dtime;           //内存段最近被脱离的时间·
time_t shm_ctime;           //内存段最近被修改的时间
};
  1. 内存段相关函数
int shmget(key_t key,size,flag);
key:必须是唯一的,可以用ftok生成
size: 内存段的大小
flag:标志
如果内存段已存在,key要和那个已存在的key一致,size一致,flag可以设置成IPC_CREAT 用来打开该内存段。如果不存在,则创建该key对应的size大小的内存段。
当key为IPC_PRIVATE时,总是创建新的内存段。
函数调用成功返回内存段的调用标识,失败返回-1
  1. 内存端的附加和拆离
int shmat(int shmid,void *addr,flag);
如果addr = 0 程序自动附加该内存段
addr != 0 程序附加到指定内存段
返回一个附加完后,指向内存段的地址。
int shmdt(void *addr);
addr是shmat返回的附加地址,该函数是拆离该内存段
  1. 共享内存段的控制
int shmctl(int shmid,int cmd,shmid_ds *buf);
下图是cmd取值

cmd的取值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值