解决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
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:共享内存的状态
总结
以上所述是小编给大家介绍的解决Linux system v 共享内存问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
- MySQL(一)之MySQL简介与安装
- 无人值守,检测程序正常运行,遇故障则重启服务
- JS魔法堂:jsDeferred源码剖析
- JavaSE(八)之集合概述
- 浅谈PHP开发与Java开发的优劣势,还不知道学习方向的可以来看看
- KVM+Qemu+Libvirt实战
- 内核级虚拟化技术
- tomcat配置ROOT目录和多站点
- IntelliJ IDEA使用(一)基本设置与类、方法模板设置
- JS魔法堂:从void 0 === undefined说起
- Maven(三)在Eclipse中使用Maven与Maven坐标
- Nginx多站点设置及负载均衡
- Maven(二)Maven项目的创建(命令、myeclipse)及生命周期
- JS魔法堂:初探传说中的setImmediate函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 每天手撕一道算法-64. 最小路径和
- Flutter 1.20 下的 Hybrid Composition 深度解析
- Flutter 1.17 对列表图片的优化解析
- SQL注入常用函数和关键字总结
- 用遗传算法求解函数
- javafx框架tornadofx实战-益智游戏-找出指定的内容1
- Qt音视频开发8-ffmpeg保存裸流
- PyTorch6:nn.Linear&常用激活函数
- Python制作图片验证码?也就三行代码罢了
- 小技巧整理(一)
- 20个能够有效提高 Pandas数据分析效率的常用函数,附带解释和例子
- 4.深入k8s:持久卷PV、PVC及其源码分析
- 5.深入k8s:StatefulSet控制器及源码分析
- 简介机器学习中的特征工程
- 在机器学习回归问题中,你应该使用哪种评估指标?