一:什么是共享内存

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

二:共享内存的原理图


    


三: 相关的函数

头文件:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/shm.h>

创建或打开函数:

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

转载于:https://www.cnblogs.com/llguanli/p/8628854.html

Linux学习日志--共享内存相关推荐

  1. 从零开始的Linux学习日志(3)

    从零开始的Linux学习日志(3) vim文本编辑器 1.vim文本编辑器的三种模式 2.命令模式的常用命令 3.末行模式的常用命令 4.vim使用实例--配置主机名称 5.vim使用实例--配置网卡 ...

  2. 从零开始的Linux学习日志

    从零开始的Linux学习日志 从零开始的Linux学习生活 搭建环境 常见的Linux指令 1. echo 2.date 3.reboot和poweroff 4.其他重要指令 小结 从零开始的Linu ...

  3. linux 查看共享内存最大值,linux上更改共享内存的最大值

    linux下更改共享内存的最大值 System V IPC 参数 名字 描述 合理取值 SHMMAX 最大共享内存段尺寸(字节) 最少若干兆(见文本) SHMMIN 最小共享内存段尺寸(字节) 1 S ...

  4. Linux下进程间通信--共享内存:最快的进程间通信方式

    内存共享最新整理: Linux下进程间通信-共享内存 - 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式https://www.codecomeon.com/posts/109/ ...

  5. 从零开始的Linux学习日志(4)

    从零开始的Linux学习日志(4) 用户身份与能力 1.UID 2.GID和Groups 3.添加新用户useradd 4.添加新的用户组groupadd 5.修改用户属性usermod 6.修改用户 ...

  6. 从零开始的Linux学习日志(2)

    从零开始的Linux学习日志(2) 重定向命令行 1.标准输入输出重定向 2.输入重定向 3.输出重定向 管道命令符 命令行的通配符 常用的转义字符 重要的环境变量 重定向命令行 1.标准输入输出重定 ...

  7. 【操作系统实验】Linux进程通信—共享内存通信、管道通信

    Linux进程通信-共享内存通信.管道通信 一.实验目的: 二.实验题目: 1. 试设计程序利用共享内存完成如下进程通信 1.shmget函数 2.shmat函数 3.shmdt函数 4.shmctl ...

  8. Linux无锁共享内存,优秀数据结构学习 - 共享内存无锁队列的实现(二)

    优秀数据结构学习 - 共享内存无锁队列的实现(二) 优秀数据结构学习 - 共享内存无锁队列的实现(二) 1 关键技术 操作系统提供的进程间通信机制有文件.socket.消息队列.管道.共享内存等.其中 ...

  9. 嵌入式linux的学习笔记-共享内存(六)

    共享内存 共享内存是可以被多个进程共享访问的一部分物理内存,如果多个进程都把一个内存区映射到自身的虚拟地址空间,则这些进程就可以直接访问该共享的内存区域,从而通过共享内存的方式实现多进程间的通讯,共享 ...

  10. 【Linux】进程间通信-共享内存

    前言 我们知道,在Linux中,进程是相互独立存在的,不存在直接让进程之间互相通信的方式.但是如果我们能让不同进程之间见到同一块内存,也就是都能读写这片区域是不是就能够达到进程间通信呢? 事实证明确实 ...

最新文章

  1. python 百度地图api热力图_【热力图】区域地图热力图,百度地图api
  2. 我不想just talk talk
  3. VS中的调试相关的技巧
  4. OData metadata 定义中,entity type key 的作用是什么
  5. 分布式数据流计算系统的数据缓存技术综述
  6. 我很想走到一个森林里旅游
  7. PowerPoint笔记(四)
  8. js 解析url中search时存在中文乱码问题解决方案
  9. 毕设日志——特征融合修改vgg16.py
  10. 总结windows下堆溢出的三种利用方式
  11. poj 1958 Strange Towers of Hanoi dp,需要仔细读题
  12. (并查集) Wireless Network --POJ --2236
  13. SqlServer智能提示工具
  14. 湖北移动中兴B860AV2.1_S905L_线刷固件包
  15. 安卓平台模拟软件绑定的手机(号码)以及地理位置
  16. 怎样设计完整的交易系统(主观交易和程序化交易均可借鉴)
  17. 洛谷P1075 质因数分解C语言
  18. win10怎么更新显卡驱动_Intel 推送最新 Win10 图形显卡、WiFi、蓝牙驱动程序更新...
  19. C#将纵向内容打印到横向纸张上(打印旋转)
  20. 【巩固地基】系列之:unity基础读书笔记(杂)

热门文章

  1. Oracle用户密码过期的处理方法
  2. [清华集训2016]温暖会指引我们前行——LCT+最大生成树
  3. Android 应用的启动方式
  4. MySQL学习笔记之约束条件
  5. iOS下载文件,保存路径. 防止加到iCloud备份
  6. 服务器设计笔记(1)-----消息的封装
  7. 今天又感受到了编程的乐趣
  8. mysql insert or update_MySQL insert or update SQL 示例
  9. 查看linux版本是 centos还是ubuntu
  10. 面试题--------1、HashMap和HashTable的区别