记linux下进程间通信方式之共享内存(一)

共享内存是进程间通信中效率极高的一种方案,以下是我对共享内存的探索学习过程。
在这里插入图片描述

这个是共享内存的具象化,进程A和进程B两个不相关的进程都可以通过特殊的连接方式共同访问使用同一块内存。
共享内存中涉及到的如下几个函数

1. int shmget(key_t key,size_t size,int shmflg);

作用:用来创建共享内存
返回值:共享内存段的id,供shmat使用
形参:
key : 这个共享内存段的名字
size : 共享内存的大小
shmflg : 由九个权限标志构成,用法和创建文件时使用的mode模式标志是一样的,为了方便,这里设置成0666

2. void shmat(int shmid,const voidshmaddr,int shmflg);

作用:当共享内存刚被创建时,其他内存还不能访问它,该函数起到连接的作用。
返回值:共享内存提供给该进程的起始地址
形参:
shmid : shmget()函数返回值为shmid;
shmaddr : 把共享内存连接到当前进程的时候准备放置它的那个地址,一般设置为0,让其自动选择。
shmflg : 连接时设置的读写标志,一般设置为0.

3.int shmdt(const void *shmaddr)

作用:断开该进程与共享内存的连接
返回值:成功返回0,失败返回-1;
形参:
shmaddr:shmat的返回值即shmaddr

int shmctl(int shmid , int cmd , struct shmid_ds *buf)

作用:
形参:
shmid: shm_id是shmget函数返回的共享内存标识符。

cmd : 是要采取的操作,它可以取下面的三个值 :
IPC_STAT:把shmid_ds结构中的数据设置为共享内存的当前关联值,即用共享内存的当前关联值覆盖shmid_ds的值。
IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值
IPC_RMID:删除共享内存段
第三个参数,buf是一个结构指针,指向一个保存着共享内存的模式状态和访问权限的数据结构。


基本的函数到上面就学习完毕了,下面是学习如何应用它们。
在这里插入图片描述
上图是学习按照某博主的代码敲了一遍后,运行结果。到此,已经初步了解共享内存的使用,为确保进程间同步的原子性,接下来应该学习的是条件量,即pv操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值