当前位置: 首页 > news >正文

#Linux系统编程(共享内存)

(一)发行版:Ubuntu16.04.7


(二)记录:

(1)什么是共享内存

共享内存是System V版本的最后一个进程间通信方式。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。

(2)shmget函数

头文件:<sys/ipc.h>、<sys/shm.h>

函数原型:  int shmget(key_t key,size_t size,int shmflg);

参数:key_t key:IPC_PRIVATE或者是ftok函数的返回值

          size_t size:   共享内存的大小

          int shmflg:   权限

返回值:成功返回共享内存的标识符,失败返回-1。

(3)shmget函数编译运行

a.使用IPC_PRIVATE

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>int main(void)
{
int shmid;
shmid=shmget(IPC_PRIVATE,1024,0777);
if(shmid==-1)
{
printf("shmget error.\n");
return -1;
}
printf("shmget is ok and shmid is %d\n",shmid);
return 0;
}

删除共享内存:

 (4)ftok函数

头文件:<sys/types.h>、<sys/ipc.h>

函数原型:key_t ftok(const char *pathname,int proj_id);

参数:const char *pathname文件路径以及文件名

           int proj_id:字符

返回值:成功返回key值,失败返回-1

(5)ftok函数编译运行(需要先创建m.c)

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>int main(void)
{
int shmid;
key_t key;
key=ftok("./m.c",'m');
shmid=shmget(key,1024,0777|IPC_CREAT);
if(shmid==-1)
{
printf("shmget error.\n");
return -1;
}
printf("shmget is ok and shmid is %d\n",shmid);
return 0;
}

可以发现用ftok创建的共享内存的key值不为0 。

(6)shmat函数

头文件:<sys/types.h>、<sys/shm.h>

函数原型:void *shmat(int shmid,const void *shmaddr,int shmflg);

参数:int shmid:共享内存的标识符,就是shmget函数的返回值

          const void *shmaddr:映射到的地址,一般写NULL,NULL为系统自动完成的映射

          int shmflg:通常为0,表示共享内存可读可写,或者SHM_RDONLY,表示共享内存只读

返回值:成功返回共享内存映射到进程中的地址,失败返回-1

 (7)shmdt函数

头文件:<sys/types.h>、<sys/shm.h>

函数原型:int shmdt(const void *shmaddr);

参数:const void *shmaddr:共享内存映射后的地址

返回值:成功返回0,失败返回-1

注意:shmdt函数是将进程中的地址映射删除,也就是说当一个进程不需要共享内存的时候,就可以使用这个函数将他从进程地址空间中脱离,并不会删除内核里面的共享内存对象。

(8)父进程与子进程进行通信

//父进程与子进程通过共享内存通信
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int shmid;
key_t key;
pid_t pid;
//映射地址
char *s_addr,*p_addr;
//创建共享内存
key=ftok("./m.c",'m');
shmid=shmget(key,1024,0777|IPC_CREAT);
if(shmid==-1)
{
printf("shmget error.\n");
return -1;
}
printf("shmget is ok and shmid is %d\n",shmid);
//创建进程
pid=fork();
//父进程
if(pid > 0)
{//映射地址p_addr=shmat(shmid,NULL,0);strncpy(p_addr,"hello",5);wait(NULL);exit(0);
}
//子进程
if(pid == 0)
{sleep(2);s_addr = shmat(shmid,NULL,0);printf("s_addr is %s\n",s_addr);exit(0);
}
return 0;
}

 


(三)命令:

相关文章:

#Linux系统编程(共享内存)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;什么是共享内存 共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑…...

蓝桥杯备考随手记: practise01

问题描述: 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff0c;在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 2019 中&#xff0c;所有这样的数的和是多少&#xff1f; 思路分析…...

【openGL4.x手册09】转换反馈

目录 一、说明二、着色器设置2.2 捕获的数据格式2.2 高级交错2.3 双精度和对齐2.4 In-shader规范 三、缓冲区绑定四、反馈过程五、反馈对象5.1 反馈暂停和恢复5.2 绑定暂停的反馈对象。 六、反馈渲染七、局限性 一、说明 转换反馈是捕获由顶点处理步骤生成的基元的过程&#xf…...

记录一次报错提示npx update-browserslist-db@latest

1&#xff0c;定位文件夹位置 找到HBuilderX的安装目录, cmd切换到HBuilderX/plugins/uniapp-cli下 删除node_modules以及package-lock.json 在当前目录执行npm install 重新打开HBuilderX运行 2&#xff0c; 删除后&#xff0c;再次通过hbuilderX启动微信小程序&#xff0c;会…...

【Go】二、Go的基本数据类型

文章目录 0、进制1、变量的声明2、数据类型3、整型4、浮点型5、字符类型6、布尔类型7、字符串类型8、基本数据类型的默认值9、类型转换10、基本类型转String11、String转其他类型 0、进制 N进制&#xff0c;逢N进一 1、变量的声明 //声明 赋值 var age int 18//声明、赋值、…...

十一、Spring源码学习之registerListeners方法

registerListeners()方法 protected void registerListeners() {// Register statically specified listeners first.//获取容器中事件监听并存放到多播器中 applicationListenersfor (ApplicationListener<?> listener : getApplicationListeners()) {getApplicationE…...

Oracle 控制文件详解

1、控制文件存储的数据信息 1&#xff09;数据库名称和数据库唯一标识符&#xff08;DBID) 2&#xff09;创建数据库的时间戳 3&#xff09;有关数据文件、联机重做日志文件、归档重做日志文件的信息 4&#xff09;表空间信息 5&#xff09;检查点信息 6&#xff09;日志序列号…...

活体成像应用染料CY3.5-NHS星戈瑞

活体成像是一种生物医学研究的重要工具&#xff0c;它能够实时、无创地观察生物体内细胞和分子的动态变化。染料CY3.5-NHS&#xff0c;作为一种常用的活体成像染料&#xff0c;在许多生物医学研究中发挥着关键作用。本文将详细介绍染料CY3.5-NHS的特点、应用以及优势&#xff0…...

【优选算法】专题1 -- 双指针 -- 复写0

前言&#xff1a; 补充一下前文没有写到的双指针入门知识&#xff1a;专题1 -- 双指针 -- 移动零 目录 基础入门知识&#xff1a; 1. 复写零&#xff08;easy&#xff09; 1. 题⽬链接&#xff1a;1089.复习0 - 力扣&#xff08;LeetCode&#xff09; 2. 题⽬描述&#xff…...

GESP Python编程三级认证真题 2024年3月

Python 三级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&#xff0c;这个鸿蒙是&#xff1f;&#xff08; &#xff09; A. 小程序 B. 计时器 C. 操作系统…...

前端理论总结(css3)——link/import区别 // 伪类/伪元素

伪类/伪元素 1&#xff1a; 伪类使用1个冒号&#xff0c;常见的有&#xff1a;:hover&#xff0c;:link&#xff0c;:active&#xff0c;:target&#xff0c;:not()&#xff0c;:focus等 伪元素使用 2 个冒号&#xff0c;常见的有&#xff1a;::before&…...

ntp服务器搭建

1、手动修改时区 CST可以为如下4个不同的时区的缩写: 美国中部时间:Central Standard Time (USA) UT-6:00 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30 中国标准时间:China Standard Time UT+8:00 古巴标准时间:Cuba Standard Time UT-4:00小结: UTC:…...

对象的内存布局

在Java虚拟机&#xff08;HotSpot&#xff09;中&#xff0c;对象在 Java 内存中的 存储布局 可分为三块&#xff1a; 对象头 存储区域实例数据 存储区域对齐填充 存储区域 对象头区域&#xff1a; 存储对象自身的运行时数据&#xff0c;如&#xff1a;哈希码、GC分代年龄、锁状…...

docker centos7离线安装ElasticSearch单机版

目录 1.下载ES并解压2.新建elasticsearch用户3.修改ES配置文件4.启动ES服务5.设置开机启动 本文以 elasticsearch-7.8.1为例。 1.下载ES并解压 cd /root/install wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz tar -z…...

【计算机网络】IP 协议

网络层IP协议 一、认识 IP 地址二、IP 协议报头格式三、网段划分1. 初识子网划分2. 理解子网划分3. 子网掩码4. 特殊的 IP 地址5. IP 地址的数量限制6. 私有 IP 地址和公网 IP 地址7. 理解全球网络&#xff08;1&#xff09;理解公网&#xff08;2&#xff09;理解私网&#xf…...

刷题DAY38 | LeetCode 509-斐波那契数 70-爬楼梯 746-使用最小花费爬楼梯

509 斐波那契数&#xff08;easy&#xff09; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1)…...

蓝桥杯-卡片换位

solution 有一个测试点没有空格&#xff0c;要特别处理&#xff0c;否则会有一个测试点运行错误&#xff01; 还有输入数据的规模在变&#xff0c;小心顺手敲错了边界条件 #include<iostream> #include<string> #include<queue> #include<map> #incl…...

Unity 布局控制器Content Size Fitter

Content Size Fitter是Unity中的一种布局控制器组件&#xff0c;用于根据其内容的大小来调整包含它的UI元素的大小。换句话来说就是&#xff0c;Content Size Fitter可以根据UI元素内部内容的大小&#xff0c;自动调整UI元素的大小&#xff0c;以确保内容能够正确显示。 如下图…...

Python的面向对象、封装、继承、多态相关的定义,用法,意义

面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用对象的概念来模拟现实世界的实体&#xff0c;并通过类&#xff08;Class&#xff09;来创建这些实体的蓝图。OOP的核心概念包括封装、继承和多态。 Python中的面向对象编程 在Python中&#xff0c;一…...

Elasticsearch 向量搜索

目标记录 ["你好&#xff0c;我的爱人","你好&#xff0c;我的爱妻","你好&#xff0c;我的病人","世界真美丽"] 搜索词 爱人 预期返回 ["你好&#xff0c;我的爱人","你好&#xff0c;我的爱妻"] 示例代码…...

2024蓝桥杯每日一题(背包)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;货币系统 试题二&#xff1a;01背包问题 试题三&#xff1a;完全背包问题 试题一&#xff1a;货币系统 【题目描述】 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每…...

Redis桌面客户端

3.4.Redis桌面客户端 安装完成Redis&#xff0c;我们就可以操作Redis&#xff0c;实现数据的CRUD了。这需要用到Redis客户端&#xff0c;包括&#xff1a; 命令行客户端图形化桌面客户端编程客户端 3.4.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端&#xff1…...

让Unity的协程变得简单

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢…...

2.9 Python缩进规则(包含快捷键)

Python缩进规则&#xff08;包含快捷键&#xff09; 和其它程序设计语言&#xff08;如 Java、C 语言&#xff09;采用大括号“{}”分隔代码块不同&#xff0c;Python采用代码缩进和冒号&#xff08; : &#xff09;来区分代码块之间的层次。 在 Python 中&#xff0c;对于类…...

任务记录.

播放器端的解码同步问题 miracast的投屏问题&#xff0c;进行修改的问题。 播放器ffplay命令没有声音的修改问题。 任务&#xff1a;如何将断开连接后在连接发送的数据&#xff0c;两秒后再去显示。 猜测&#xff1a; 一直在监听。断开后要求2秒后的数据再显示。那么也就是认为…...

andv vue 实现多张图片上传

1、提示 注意&#xff1a;&#xff1a;&#xff1a; 便利出来的数组 点击保存需要 把 双引号去掉 this.formData.image this.imageUrlList.filter((image) > image ! ) 注意&#xff1a;&#xff1a;&#xff1a; 回显的时候需要 再把 双引号加上 …...

使用JMeter+Grafana+Influxdb搭建可视化性能测试监控平台

【背景说明】 使用jmeter进行性能测试时&#xff0c;工具自带的查看结果方式往往不够直观和明了&#xff0c;所以我们需要搭建一个可视化监控平台来完成结果监控&#xff0c;这里我们采用三种JMeterGrafanaInfluxdb的方法来完成平台搭建 【实现原理】 通过influxdb数据库存储…...

django模板下,vue的使用(前后端不分离)

目录 关于djangovue的结合使用一、在你的templates中引入vue.js二、关于vue与django模板变量的冲突问题三、示例结语 关于djangovue的结合使用 网上的相关教程基本上都是部署node.js,npm安装vue&#xff0c;生成vue项目&#xff0c;然后将vue项目部署至django&#xff0c;这些…...

python笔记(7)List(列表)

目录 创建列表 取列表中的值 更新列表 删除元素 脚本操作符 嵌套列表 Python列表函数&方法 创建列表 创建一个列表&#xff08;List)用方括号[]括起来就可以&#xff0c;数据项之间用逗号作为分隔符&#xff0c;数据项可以是字符串&#xff0c;数字&#xff0c;甚至…...

java 抠取红色印章(透明背景)

一个亲戚让我帮他把照片里的红色印章抠出来&#xff0c;&#xff0c;&#xff0c;记录下处理过程&#xff0c;代码如下&#xff0c;可直接用&#xff1a; public static void signatureProcess(String sourceImagePath, String targetImagePath) {Graphics2D graphics2D null…...

垫江网站建设哪家好/制作网页的工具软件

图像分割—基于图的图像分割&#xff08;Graph-Based Image Segmentation&#xff09;Reference:Efficient Graph-Based Image Segmentation,IJCV 2004,MIT CodeGraph-Based Segmentation 是经典的图像分割算法&#xff0c;作者Felzenszwalb也是提出DPM算法的大牛。该算法是基于…...

安陆网站建设/网站建设品牌公司

【SymPy】&#xff08;一&#xff09;SymPy简介 【SymPy】&#xff08;二&#xff09;使用SymPy需要避开的坑 【SymPy】&#xff08;三&#xff09;基本操作&#xff08;四&#xff09;打印 简化 文章目录简化1 simplify2 多项式/有理函数简化2.1 expand2.2 factor2.2.3 colle…...

安徽政府网站建设/百度竞价推广点击软件

经典面试题&#xff1a;链表的相交与环问题 点击打开链接 http://blog.csdn.net/hackbuteer1/article/details/7583102 c语言面试精华版 点击打开链接 http://blog.csdn.net/hackbuteer1/article/details/6550824...

做网站编程在程序/网站的营销策略

进程间通讯( IPC&#xff1a;Inter Processes Communication ) 一. 管道(PIPE) 管道是一种特殊类型的文件&#xff0c;在应用层体现为两个打开的文件描述符。 对于管道本身而言&#xff0c;不是普通的文件&#xff0c;不属于某个文件系统&#xff0c;其只存在于内存中&#xf…...

珠海在线网站建设/seo公司培训课程

哈喽大家好&#xff0c;我是无知便是罪&#xff0c;专注于收集和分享互联网上不为人知的好东西&#xff01;文件传输想必大家经常会用到&#xff0c;但是使用场景不同选择也不同&#xff01;像平常的小文件通过某些社交软件即可在手机与电脑之间快速传输。不过它们限制了文件大…...

龙华做棋牌网站建设找哪家效益快/山西seo排名

MySQL5.7 并行复制 1、缘由&#xff1a; 某天看到主从复制延时的告警有点频繁&#xff0c;就想着是不是彻底可以解决一下。 一般主从复制&#xff0c;有三个线程参与&#xff0c;都是单线程&#xff1a;Binlog Dump&#xff08;主&#xff09; ----->IO Thread &#xff08;…...