IPC机制之共享内存

同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。所以必须要某种同步机制来保证该共享内存中资源的准确性。

 

共享内存相关函数

shmget()创建共享内存并返回标识符

头文件 #include<sys/shm.h>

int  shmget(key_t  key,  size_t  size, int shmflag);

第一个参数key,与信号量一样,程序需要提供一个参数key,有效地为共享内存段命名。有一个特殊的键值:IPC_PRIVATE,它用于创建一个只属于创建进程的共享内存,通常你不会用到这个值。

第二个参数size,以字节为单位指定需要共享的内存容量。

第三个参数shmflag,与创建文件时使用的mode、标志一样,由IPC_CREAT定义的一个特殊比特必须和权限标志按位或才能创建一个新的共享内存段。如果无需用到IPC_CREAT标志,该标志就会被悄悄忽略。

如果共享内存创建成功,shmget返回一个共享内存标识符(非负整数),该标识符将用于后续的共享内存函数。如果失败了就返回-1.

 

shmat()函数将共享内存链接到当前进程

void* shmat(int  shm_id,  const  void*  shm_addr,  int  shmflg);

第一个参数shm_id是由shmget函数返回的共享内存标识符

第二个参数shm_addr指定的是共享内存链接到当前进程中的地址位置。它通常是一个空指针,表示让系统来选择共享内存出现的地址

第三个参数shmflg十一组位标志。它的两个可能取值是SHM_RND和SHM_RDONLY。其中SHM_RND与shm_addr联合使用,用来控制共享内存的链接地址。SHM_RDONLY使得链接的内存只读。

我们很少需要控制共享内存链接的地址,通常都是让系统来选择一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值