Linux system v 共享内存
system v 共享内存
#include <sys/types.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);
建立:进程与共享内存的关联关系
key_t key:16进制的非0数字。
一般有两种方式设置它。
第一种:调用fotk函数
第二种:直接使用IPC_PRIVATE
注意:如果两次调用ftok函数时,参数都一样,那么得到的key_t key是一样的,所以shmget函数的返回值也是一样的,也就是说可以访问同一个共享内存。如果使用IPC_PRIVATE,那么shmget函数的返回值每次都不一样。
size:共享内存的大小
shmflg:
- IPC_CREAT
- IPC_EXCL
- 用户,组用户,其他用户对这片内存的权限,有9个bit来表示,比如664
返回值:成功返回这片共享内存的标识号;失败返回-1,errno被设置。
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
- shmid:由shmget函数创建的,也就是shmget函数的返回值
- shmaddr:
- NULL:让内核去申请内存空间
- 非NULL:自己用malloc开辟一个空间,让共享内存shmid和这个地址关联上。但是如果不是4K的整数倍,内核会向上或者向下调整。
- shmflg:
- SHM_RND:读写
- SHM_RDONLY:只读
- 返回值:
- 成功:返回内存地址
- 失败:返回(void *) -1
#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr);
取消进程与共享内存的关联关系
- shmaddr:shmat的返回值
- 返回值:成功0;失败-1,并设置errno。
#include <sys/types.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
对共享内存操作,更具cmd的不同,对共享内存进行不同的操作。
- shmid:由shmget函数创建的,也就是shmget函数的返回值
- cmd:
- IPC_STAT:得到共享内存的状态
- IPC_RMID:标记删除共享内存(当共享内存的引用计数变为0时,删除)
- IPC_SET:设置共享内存的属性(修改权限,修改shmid等)
- 等等
- buf:shmid_ds结构体
- 返回值:当cmd是IPC_RMID时:成功0;失败-1,并设置errno
用命令【ipcs】可以查看共享内存的状态
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00007fff 65536 ys 664 256 0
0x00007ffe 98305 ys 664 256 0
0x0000555e 131074 ys 664 256 0
0x00000011 229379 ys 664 256 3
- key:函数shmget指定的第一个参数
- shmid:函数shmget的返回值
- owner:属于哪个用户创建的
- perms:这个共享内存的访问权限
- bytes:大小
- nattch:使用这个共享内存的进程的数量
- status:共享内存的状态
c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854
Linux system v 共享内存的更多相关文章
- Linux进程通信之System V共享内存
前面已经介绍过了POSIX共享内存区,System V共享内存区在概念上类似POSIX共享内存区,POSIX共享内存区的使用是调用shm_open创建共享内存区后调用mmap进行内存区的映射,而Sys ...
- Linux IPC实践(9) --System V共享内存
共享内存API #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int ...
- 阐述linux IPC(五岁以下儿童):system V共享内存
[版权声明:尊重原创.转载请保留源:blog.csdn.net/shallnet 要么 .../gentleliu,文章学习交流,不用于商业用途] system V共享内存和posix ...
- linux网络编程之system v共享内存
接着上次的共享内存继续学习,这次主要是学习system v共享内存的使用,下面继续: 跟消息队列一样,共享内存也是有自己的数据结构的,system v共享内存也是随内核持续的,也就是说当最后一个访问内 ...
- System V 共享内存区
1.概述 系统调用mmap通过映射一个普通文件实现共享内存.System V 则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信.也就是说,每个共享内存区域对应特殊文件系统shm中的一个文 ...
- System V共享内存介绍
(一)简单概念 共享内存作为一种进程间通信的方式,其相较于其他进程间通信方式而言最大的优点就是数据传输速率快.其内部实现的方式采用了Linux进程地址空间中的mmap文件映射区,将文件内容直接映射到各 ...
- UNIX环境高级编程——System V 共享内存区
共享内存区域是被多个进程共享的一部分物理内存.如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信.共享内存是进程间共享数据的一种最 ...
- php进程(线程)通信基础--System V共享内存
PHP默认情况没有开启功能,要支持该功能在编译PHP的时候要加入下面几个选项 System V消息,--enable-sysvmsg System V信号量支持,--enable-sysvsem ...
- 共享内存之——system V共享内存
System V 的IPC对象有共享内存.消息队列.信号灯(量). 注意:在IPC的通信模式下,不管是共享内存.消息队列还是信号灯,每个IPC的对象都有唯一的名字,称为"键(key)&quo ...
随机推荐
- 【转载】Android IntentService使用全面介绍及源码解析
一 IntentService介绍 IntentService定义的三个基本点:是什么?怎么用?如何work? 官方解释如下: //IntentService定义的三个基本点:是什么?怎么用?如何wo ...
- 团队项目之Scrum2
小组:BLACK PANDA 时间:2019.11.17 每天举行站立式会议 提供当天站立式会议照片一张 2 昨天已完成的工作 2 确定用户登录与注册和编辑页面的接口 前端方面:详细确定页面的功能,并 ...
- linux 系统下Anaconda的安装【安装python3.6环境首选】
如果你不想使用python3.6的源码安装包,不想各种繁琐的配置命令,那Anacoda里边自带的python3.6环境就最合适不过了,下面来介绍下anacoda的安装过程,~so easy~Anaco ...
- Linux-3.14.12内存管理笔记【构建内存管理框架(5)】
前面已经分析了内存管理框架的构建实现过程,有部分内容未完全呈现出来,这里主要做个补充. 如下图,这是前面已经看到过的linux物理内存管理框架的层次关系. 现着重分析一下各个管理结构体的成员功能作用. ...
- Unity如何更改精灵中心点
Unity虽然可以改中心点但是仅支持几个特定位置. 如果是一个你是切割的精灵,则可以进入精灵编辑器中调整 打开精灵编辑器后按调整如下图所示的pivot选项,我在这里把精灵调整成了右上. 在精灵编辑 ...
- 实战项目-用例评审-问题总结-Dotest-董浩
实战项目-用例评审-问题总结 内部班项目用例评审,总结的问题:供大家参考!提升用例最好的方式,可以互相执行下(评审),就会明白自己的差距或者需要避免的点在哪里.(前提是会) 1)覆盖率 原型中提到的一 ...
- go语言设计模式之proxy
代理模式,单元测试用例真的写得详细, 受教~ proxy.go package proxy import ( //"errors" "fmt" ) type U ...
- 6. java 方法
一.方法定义格式 修饰符 返回值类型 方法名称(参数类型 参数名称, ...){ 方法体; return 返回值; } 1. 修饰符:现阶段固定写法,public static 2. 参数如果有多个, ...
- Paper | Residual Attention Network for Image Classification
目录 1. 相关工作 2. Residual Attention Network 2.1 Attention残差学习 2.2 自上而下和自下而上 2.3 正则化Attention 最近看了些关于att ...
- json解析模块
json.loads(json) 把json格式的字符串转为Python数据类型 html_json = json.loads(res.text) json.dumps(python) 把 pytho ...