进程间共享内存

位于系统的交换分区

#include<sys/ipc.h>

#incude<sys/shm.h>

int shmget(key_t key, size_t size, int shmflg)

  • key 手动指定的共享内存id   IPC_PRIVATE(0)
  • size 手动指定共享内存大小  非创建者可指定0
  • shmflg     0655 | IPC_CREAT 共享内存创建者需要指定此标志

IPC_EXCL | IPC_CREAT一起使用可确保共享内存已存在时返回错误

  • mode_flags 
  • SHM_HUGETLB  使用 huge pages
  • SHM_NORESERVE 不保留交换空间

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

  • shm_addr  attach地址
  • shmflg  SHM_RDONLY:为只读模式,其他为读写模式

int shmdt(const void* shmaddr)

  • 当前进程与共享内存分离

int shmctl(int shm_id, int command, struct shmid_ds *buf)

  • command

IPC_STAT:获取共享内存的状态,把共享内存的shmid_ds结构复制到buf中

IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内

IPC_RMID:删除这片共享内存

  • SHMMAX  共享内存总体最大字节数  /proc/sys/kernel/shmmax
  • SHMMNI   共享内存总体最大段数      /proc/sys/kernel/shmmni
  • SHMALL   共享内存总体最大页数      /proc/sys/kernel/shmall






IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值