Linux学习日志--共享内存
一:什么是共享内存
共享内存是属于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学习日志--共享内存相关推荐
- 从零开始的Linux学习日志(3)
从零开始的Linux学习日志(3) vim文本编辑器 1.vim文本编辑器的三种模式 2.命令模式的常用命令 3.末行模式的常用命令 4.vim使用实例--配置主机名称 5.vim使用实例--配置网卡 ...
- 从零开始的Linux学习日志
从零开始的Linux学习日志 从零开始的Linux学习生活 搭建环境 常见的Linux指令 1. echo 2.date 3.reboot和poweroff 4.其他重要指令 小结 从零开始的Linu ...
- linux 查看共享内存最大值,linux上更改共享内存的最大值
linux下更改共享内存的最大值 System V IPC 参数 名字 描述 合理取值 SHMMAX 最大共享内存段尺寸(字节) 最少若干兆(见文本) SHMMIN 最小共享内存段尺寸(字节) 1 S ...
- Linux下进程间通信--共享内存:最快的进程间通信方式
内存共享最新整理: Linux下进程间通信-共享内存 - 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式https://www.codecomeon.com/posts/109/ ...
- 从零开始的Linux学习日志(4)
从零开始的Linux学习日志(4) 用户身份与能力 1.UID 2.GID和Groups 3.添加新用户useradd 4.添加新的用户组groupadd 5.修改用户属性usermod 6.修改用户 ...
- 从零开始的Linux学习日志(2)
从零开始的Linux学习日志(2) 重定向命令行 1.标准输入输出重定向 2.输入重定向 3.输出重定向 管道命令符 命令行的通配符 常用的转义字符 重要的环境变量 重定向命令行 1.标准输入输出重定 ...
- 【操作系统实验】Linux进程通信—共享内存通信、管道通信
Linux进程通信-共享内存通信.管道通信 一.实验目的: 二.实验题目: 1. 试设计程序利用共享内存完成如下进程通信 1.shmget函数 2.shmat函数 3.shmdt函数 4.shmctl ...
- Linux无锁共享内存,优秀数据结构学习 - 共享内存无锁队列的实现(二)
优秀数据结构学习 - 共享内存无锁队列的实现(二) 优秀数据结构学习 - 共享内存无锁队列的实现(二) 1 关键技术 操作系统提供的进程间通信机制有文件.socket.消息队列.管道.共享内存等.其中 ...
- 嵌入式linux的学习笔记-共享内存(六)
共享内存 共享内存是可以被多个进程共享访问的一部分物理内存,如果多个进程都把一个内存区映射到自身的虚拟地址空间,则这些进程就可以直接访问该共享的内存区域,从而通过共享内存的方式实现多进程间的通讯,共享 ...
- 【Linux】进程间通信-共享内存
前言 我们知道,在Linux中,进程是相互独立存在的,不存在直接让进程之间互相通信的方式.但是如果我们能让不同进程之间见到同一块内存,也就是都能读写这片区域是不是就能够达到进程间通信呢? 事实证明确实 ...
最新文章
- python 百度地图api热力图_【热力图】区域地图热力图,百度地图api
- 我不想just talk talk
- VS中的调试相关的技巧
- OData metadata 定义中,entity type key 的作用是什么
- 分布式数据流计算系统的数据缓存技术综述
- 我很想走到一个森林里旅游
- PowerPoint笔记(四)
- js 解析url中search时存在中文乱码问题解决方案
- 毕设日志——特征融合修改vgg16.py
- 总结windows下堆溢出的三种利用方式
- poj 1958 Strange Towers of Hanoi dp,需要仔细读题
- (并查集) Wireless Network --POJ --2236
- SqlServer智能提示工具
- 湖北移动中兴B860AV2.1_S905L_线刷固件包
- 安卓平台模拟软件绑定的手机(号码)以及地理位置
- 怎样设计完整的交易系统(主观交易和程序化交易均可借鉴)
- 洛谷P1075 质因数分解C语言
- win10怎么更新显卡驱动_Intel 推送最新 Win10 图形显卡、WiFi、蓝牙驱动程序更新...
- C#将纵向内容打印到横向纸张上(打印旋转)
- 【巩固地基】系列之:unity基础读书笔记(杂)