linux共享内存异常日志,Linux学习日志--共享内存

一:什么是共享内存

共享内存是属于IPC(Inter-Process Communication进程间通信)机制,其他两种是信号量和消息队列,该机制为进程开辟创建了特殊的地址范围,就像malloc分配那样。进程可以将同一段共享内存连接到自己的地址空间上,从而操作共享内存,所以说,共享内存提供了多个进程之间共享和传递数据一种方式。需要注意的是:该机制没有提供同步机制,所以我们需要采取有效的机制来同步对共享内存的访问。

二:共享内存的原理图

dcb59ff2dd80a4e88c7d5b9e116e1146.png

三: 相关的函数

头文件:

#include 

#include 

#include 

创建或打开函数:

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

参数:第一个key是程序提供的,用于给共享内存命名。如果该命名的共享内存已经打开,则直接返回该内存标识。

第二个sie是规定内存的大小。

第三个是掩码合成值。包括权限值和IPC_CREAT或IPC_EXCL。例如:0600|IPC_CREAT 代表可读写并且如果该内存不存在,就创建一个。

返回:调用成功,返回内存标识。失败,返回-1.

连接函数:

void *shmat(int shmid, const void *shmaddr, int shmflg);

作用://映射进程和共享内存的地址空间

参数:

第一个shmid是创建函数返回标识。

第二个shmaddr 是共享内存在进程的地址位置。通常为NULL,让系统默认。

第三个shmflg是位标识。通常为0

返回:调用成功,返回指向共享内存第一个字节的指针。失败,返回-1;

分离函数:

int shmdt(const void *shmaddr);//用于分离进程空间和共享内存段

返回:调用成功,返回0    失败,返回-1;

删除共享内存段函数:

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

参数:

第一个shmid是创建函数返回标识。

第二个cmd 是对共享内存操作。 通常为IPC_RMID  代表删除。

第三个通常为NULL

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文:http://blog.csdn.net/bao2516090/article/details/46850101

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值