System V 共享内存信息结构
struct shmid_ds {
struct ipc_perm shm_perm; // operation permission struct
size_t shm_segsz; // segment size
pid_t shm_lpid; // pid of last operation
pid_t shm_cpid; // creator pid
shmatt_t shm_nattach; // current # attached
shmat_t shm_cnattach; // in-core # attached
time_t shm_atime; // last attach time
time_t shm_dtime; // last detach time
time_t shm_ctime; // last change time of this structure
}

1)
shmget函数创建一个尚未存在的共享内存区,或者访问一个已存在的共享内存区
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg)
key: IPC_PRIVATE,或者ftok返回的IPC键值
size:新建的共享内存大小,以字节为单位,只获取共享内存时指定为0
shmflg: 0,取共享内存标识符,若不存在则函数会报错;
IPC_CREAT,当shmflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存,返回此共享内存的标识符
IPC_CREAT | IPC_EXCL,如果内核中不存在键值与key相等的共享内存,则新建一个共享内存,如果存在这样的共享内存则报错
错误代码:
EINVAL:参数size小于SHMMIN或大于SHMMAX
EEXIST:预建立key所指的共享内存,但已经存在
EIDRM:参数key所指的共享内存已经删除
ENOSPC:超过了系统允许建立的共享内存的最大值(SHMALL)
ENOENT:参数key所指的共享内存不存在,而参数shmflg未设IPC_CREAT位
EACCES:没有权限
ENOMEM:核心内存不足

2)
shmat连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg)
shmaddr: 指定共享内存出现在进程内存地址的什么位置,直接指定为NULL让内核自己决定一个合适的地址位置
shmflg:SHM_RDONLY为只读模式,其他为读写模式
错误代码:
EACCES:无权限以指定方式连接共享内存
EINVAL:无效的参数shmid或shmaddr
ENOMEM:核心内存不足

3)
shmdt断开与共享内存附加点的地址,禁止本进程访问此片共享内存
#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr)
错误代码:
EINVAL:无效的参数shmaddr

4)
shmctl共享内存管理
#include <sys/types.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf)
cmd:
IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中
IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内
IPC_RMID:删除这片共享内存
错误代码:
EACCESS:参数cmd为IPC_STAT,确无权限读取该共享内存
EFAULT:参数buf指向无效的内存地址
EIDRM:标识符为shmid的共享内存已被删除
EINVAL:无效的参数cmd或shmid
EPERM:参数cmd为IPC_SET或IPC_RMID,却无足够的权限执行

转载于:https://www.cnblogs.com/paullam/p/3753417.html

System V 共享内存区相关推荐

  1. mmap内存映射、system V共享内存和Posix共享内存

    linux内核支持多种共享内存方式,如mmap内存映射,Posix共享内存,以system V共享内存.当内核空间和用户空间存在大量数据交互时,共享内存映射就成了这种情况下的不二选择.它能够最大限度的 ...

  2. 阐述linux IPC(五岁以下儿童):system V共享内存

    [版权声明:尊重原创.转载请保留源:blog.csdn.net/shallnet 要么 .../gentleliu,文章学习交流,不用于商业用途]         system V共享内存和posix ...

  3. 共享内存之——system V共享内存

    System V 的IPC对象有共享内存.消息队列.信号灯(量). 注意:在IPC的通信模式下,不管是共享内存.消息队列还是信号灯,每个IPC的对象都有唯一的名字,称为"键(key)&quo ...

  4. 【校招 --阶段一 系统编程】system V共享内存

    一.什么是system V共享内存 共享内存区是最快的IPC形式.一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到 内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此 ...

  5. 【Linux】进程间通信 - 匿名/命名管道与System V共享内存

    目录 前言 一.管道 0.什么是管道 1).管道的概念 2).管道的本质 3).管道指令: "|" 1.匿名管道 1).如何创建匿名管道 2).如何使用匿名管道进行通信 3).匿名 ...

  6. Linux进程间通信一 System V 共享内存简介与示例

    目录 1. System V共享内存简介 2. API介绍 2.0 key_t和标识符 2.1  创建system v共享内存 2.2 映射共享内存并使用 2.3 取消共享内存映射 2.4 控制共享内 ...

  7. linux环型共享内存,Linux system v 共享内存

    system v 共享内存 #include #include int shmget(key_t key, size_t size, int shmflg); 建立:进程与共享内存的关联关系 key_ ...

  8. Linux IPC实践(9) --System V共享内存

    共享内存API #include <sys/ipc.h> #include <sys/shm.h>int shmget(key_t key, size_t size, int ...

  9. 嵌入式Linux系统编程学习之二十三 System V 共享内存机制

    文章目录 前言 一.ftok 函数 二.shmget 函数 三.shmat 函数 四.shmdt 函数 五.shmctl 函数 补充 前言   共享内存也是进程间(进程间不需要有继承关系)通信的一种常 ...

  10. 【Linux篇】第十二篇——进程间通信(管道+system V共享内存)

    进程间通信介绍 概念 目的 本质 分类 管道 什么是管道 匿名管道 匿名管道的原理 pipe函数 匿名管道使用步骤 管道读写规则 管道的特点 管道的大小 命名管道 命名管道的原理 使用命令创建命名管道 ...

最新文章

  1. php json josn_decode()返回的是对像,如何把对像转成数组
  2. 收藏 | 卷积神经网络中用1*1 卷积有什么作用或者好处呢?
  3. 子线程适当Sleep的重要性
  4. C++字节序反转的实现算法(附完整源码)
  5. zzuli 2525: 咕咕的搜索序列
  6. linux下nginx安装与设置开机启动
  7. 9年前的大一,我们这样为女生过37女生节【祝节日快乐】
  8. [bash] printf使用范例
  9. docker create_Docker镜像管理(一)
  10. linux系统下部署go语言环境
  11. 玩转Linux系统用户管理
  12. Filecoin网络存储容量迎来3 EiB时刻
  13. Java图形编程实验总结_实验二java图形界面编程2015级.doc
  14. Java基础篇:重新温习不一样的数组
  15. 图像读取函数cv::imread()的几种使用方式
  16. react native camera
  17. Excel筛选后填充
  18. 联想y430p黑苹果之自定义屏幕亮度
  19. 规则引擎Drools示例:个人所得税计算器、信用卡申请、保险产品准入规则
  20. 奥比中光Femto相机环境配置

热门文章

  1. fisco bcos Caliper部署 错误总结
  2. thinkphp sql查询条件 一个字段多个限制条件
  3. 计算机网络第三版周舸答案,计算机网络技术基础第3版周舸第一章节计算机网络基础知识课件教学.ppt...
  4. html浮动div同行显示,div已经设了over-flow:auto;为什么没有滚动条浮动元素不能同行显示了,怎么办...
  5. 基于SSM的学生宿舍管理系统
  6. 东北师范大学计算机应用19离线作业,东北师范大学《计算机应用基础》离线作业及答案...
  7. fill和memset的区别
  8. 创建git仓库和常用的命令
  9. 秀恩爱分得快-模拟题
  10. Apache HttpClient 客户端使用详解