IPC之共享内存

一、共享内存的原理
这里写图片描述

二、共享内存的函数
2.1、int shmget(key_t key,size_t size,int flags);
返回值:失败返回-1,成功返回共享内存的id。
size:表示要申请的共享内存的大小,一般是4k的整数倍。
flags:IPC_CREAT和IPC_EXCL一起使用,则创建一个新的关系内存,否则返回-1。IPC_CREAT单独使用时返回一个共享内存,有就直接返回,没有就创建。

2.2、void *shmat(int shmid);
shmat的作用是将申请的共享内存挂接在该进程的页表上,是的虚拟内存和物理内存向对应。
返回值:返回这块内存的虚拟地址。

2.3、int shmdt(const void*shmaddr);
shmdt的作用是去挂接,将这块共享内存从页表上剥离下来。
返回值:失败返回-1.
shmaddr:表示这块物理内存的虚拟地址。

2.4int shmctl(int shmid,int cmd,const void* addr);

shmctl用来设置共享内存的属性。当cmd是IPC_RMID时可以用来删除一块共享内存。

三、命令
ipcs -m //查看系统中创建的共享内存的信息
ipcrm -m shmid //销毁创建的共享内存

四、共享内存中的结构体

ipc_perm这个结构体,在消息队列、信号量、共享内存中都是存在的。
      struct ipc_perm {
               key_t          __key;    /* Key supplied to shmget(2) */
               uid_t          uid;      /* Effective UID of owner */
               gid_t          gid;      /* Effective GID of owner */
               uid_t          cuid;     /* Effective UID of creator */
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值