【项目 进程13】2.28共享内存(1) 2.29共享内存(2)

news2024/11/14 8:50:57

文章目录

    • 2.28共享内存(1)
      • 共享内存(效率最高,比内存映射更高。因为内存映射还需一个文件做载体)
      • 共享内存使用步骤
      • 共享内存操作函数
      • 头文件
    • 2.29共享内存(2)
      • 共享内存相关问题
      • 共享内存和内存映射的区别
      • 通过共享内存实现进程间通信
      • 共享内存操作命令


2.28共享内存(1)

共享内存(效率最高,比内存映射更高。因为内存映射还需一个文件做载体)

在这里插入图片描述
在这里插入图片描述
IPC:Inter-Process Communication 进程间通信

新的问题:两个进程同时写数据,一个进程读数据,涉及进程同步问题。

共享内存使用步骤

在这里插入图片描述shm:share memory
at:attach (在虚拟内存的用户区 的 共享区 ;内存映射也在这里)
dt:detach
ctl:control

分离和销毁是不同的。

共享内存操作函数

在这里插入图片描述

头文件

#include <sys/ipc.h>
#include <sys/shm.h>

  • shmget

在这里插入图片描述

  • shmat
    在这里插入图片描述

  • shmdt
    在这里插入图片描述
    shmaddr是虚拟地址空间刚刚绑定的地址。

  • shmctl
    在这里插入图片描述第三行 :的进程
    IPC_RMID:只是标记共享内存需要被删除。要到没有进程和这块内存绑定了,这块共享内存才会被真的删除

buf:需要的操作cmd不同,buf的作用不同。在标记销毁的时候,buf没有用,所以直接置NULL就可以。

  • ftok
    在这里插入图片描述
    如果有很多的key记不过来,可以用这个。名字比身份证号好记

2.29共享内存(2)

共享内存相关问题

在这里插入图片描述

共享内存和内存映射的区别

在这里插入图片描述

通过共享内存实现进程间通信

共享内存写数据

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>

int main() {    

    // 1.创建一个共享内存
    int shmid = shmget(100, 4096, IPC_CREAT|0664);
    printf("shmid : %d\n", shmid);
    
    // 2.和当前进程进行关联
    void * ptr = shmat(shmid, NULL, 0);

    char * str = "helloworld";

    // 3.写数据
    memcpy(ptr, str, strlen(str) + 1);

    printf("按任意键继续\n");
    getchar();

    // 4.解除关联
    shmdt(ptr);

    // 5.删除共享内存
    shmctl(shmid, IPC_RMID, NULL);

    return 0;
}

共享内存读数据

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>

int main() {    

    // 1.获取一个共享内存
    int shmid = shmget(100, 0, IPC_CREAT);
    printf("shmid : %d\n", shmid);

    // 2.和当前进程进行关联
    void * ptr = shmat(shmid, NULL, 0);

    // 3.读数据
    printf("%s\n", (char *)ptr);
    
    printf("按任意键继续\n");
    getchar();

    // 4.解除关联
    shmdt(ptr);

    // 5.删除共享内存
    shmctl(shmid, IPC_RMID, NULL);

    return 0;
}

共享内存操作命令

在这里插入图片描述
ipcs -m 用比较多

在这里插入图片描述被标记销毁以后,key被置0,但是因为还有绑定,所以暂时还没被销毁。直到所有绑定都解除,ipcs -m就查不到它了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/833024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句

阿丹&#xff1a; 本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。 先放官方的文章 MongoDB CRUD操作 - MongoDB-CN-Manual 本文章分为&#xff1a; 在客户端&#xff08;dos窗口&#xff09;/可视化工具中使用…

工作流管理系统如何提升生产力

工作流管理工具通过提供无缝沟通和简化流程来提高团队的生产力。如果部署得当&#xff0c;工作流管理可以长期获得回报。 以下是工作场所管理系统如何提高员工的生产力&#xff1a; 1、无需更多的状态更新会议 工作流管理系统使您的员工无需跟踪电子邮件和讨论线程来评估项目…

【Pytorch】下载CIFAR10数据集报错: urllib.error.URLError: <urlopen error name: https>

在使用Pytorch 下载CIFAR10的时候&#xff0c;遇到一个报错&#xff0c; 可能是网络特别慢导致的&#xff0c;一般情况下都会遇到这个报错。 解决办法&#xff1a; 1、到官网直接下载这个压缩包&#xff0c;解压。 http://www.cs.utoronto.ca/~kriz/cifar.html 解压后&#x…

一套ai绘图软件教程帮你打开创作新篇章

在一个寂静的艺术工作室里&#xff0c;住着一个渴望成为画家的年轻人&#xff0c;名叫艾米。她梦想能够运用自己的创造力和手艺&#xff0c;创作出令人叹为观止的艺术作品。然而&#xff0c;面对空白的画布&#xff0c;她感到无从下手&#xff0c;不知道该从何处开始。每次她试…

数据可视化(七)常用图表的绘制

1. #seaborn绘制常用图表 #折线图 #replot&#xff08;x&#xff0c;y&#xff0c;kind&#xff0c;data&#xff09; #lineplot&#xff08;x&#xff0c;y&#xff0c;data&#xff09; #直方图 #displot&#xff08;data&#xff0c;rug&#xff09; #条形图 #barplot&…

MONAI的测试与使用(一)

MONAI的测试与使用&#xff08;一&#xff09; 一.Transform 的分类二 普通变换和字典变换的联系与区别三 加载与显示图像 一.Transform 的分类 具体API函数请参考文档&#xff1a;https://docs.monai.io/en/latest/transforms.html 二 普通变换和字典变换的联系与区别 普通变…

DAY2,C高级(shell脚本的使用)

1.今日思维导图&#xff1b; 2.递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位&#xff1b; #include<my_head.h>void Output(int num) {if(num 0)return;Output(num/10);printf("%d ",num%10);}int main(int argc, const char *argv[]) {in…

软件测试自动化selenuim的常用方法和属性总结

selenuim其实主要就是使用webdriver实例对象的方法和属性。 常用属性 1 driver.current_url 当前网页的请求地址 2 driver.current_window_handle 句柄&#xff0c;用于页面切换 3 driver.page_source 网页源代码 4 driver.title 网站的title&#xff0c;tab栏上显示的内容…

『Linux学习笔记』Linux服务器硬件配置查看

Linux服务器硬件配置查看 文章目录 一. 操作系统1.1. 发行版本1.2. 查看内核版本 二. CPU2.1. CPU统计信息2.2. CPU型号2.3. 查看物理CPU数目2.4. 每个物理CPU的核数2.5. 查看逻辑CPU的个数 三. GPU四. 内存4.1. 内存使用情况4.2. 内存硬件情况4.3. 查看内存使用信息 五. 硬盘…

幂等性问题 —— 如何防止重复创建订单

幂等性&#xff1a;对接口的多余重复调用的结果和单次调用的结果一致。 一、需要幂等性的场景 二、幂等性实现方案 核心思想&#xff1a;首先要根据业务判断什么是重复相同的请求&#xff0c;然后相同的请求都携带或生成一个唯一的识别码&#xff0c;这样在服务端就可以进行判…

JVM调优工具详解以及实战

准备 事先启动一个web应用程序&#xff0c;用jps查看进程id&#xff0c;接着用各种jdk自带的命令优化应用 Jmap jmap -histo 6160 #查看历史生成的实例 jmap -histo:live 6160 #查看当前存活的实例&#xff0c;执行过程中可能会触发一次full gc jmap -histo:live 6160 &…

关于数据仓库那些事 - 数据质量和数仓主题

数字化时代&#xff0c;数据成为了人类社会中必不可少的元素&#xff0c;也变成了现代企业经营管理中的关键。借助海量的数据&#xff0c;企业进行了深层次的数字化改革&#xff0c;把数据当成了企业发展的核心&#xff0c;但无效的数据即使规模再大&#xff0c;也对企业没有意…

EasyExcel工具类,一键实现表格导入导出,有无对应实体类均可

EasyExcel工具类&#xff0c;一键实现表格导入导出&#xff0c;有无对应实体类均可 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但…

linux du命令解析(递归计算文件子目录大小)(计算大小)(计算容量)

文章目录 du命令简介用法常用选项示例 文档原 中文选项详细解释示例递归统计某个目录下所有文件大小&#xff08;不足单位会向上取整&#xff09;&#xff08;注意&#xff1a;可能会将目录大小也统计进去&#xff0c;目录大小为4096字节4kb&#xff1f;&#xff09; du命令使用…

【第一阶段】kotlin语言的String模板

1.在Java中拼接字符串使用的是“” 2.在kotlin中使用"${}" 3.kotlin语言中if是表达式&#xff0c;更灵活 fun main() {val city"西安"val time24//java中写法println("我在"city"玩了"time"小时")//kotlin中写法&#xff0…

2023年华数杯C题思路

c题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护,还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑压力等&#xff0c;可能会对婴儿的认知、情感、社会行为等方面产生负面影响。压力…

一文读懂芯片内存

1.导读 一个芯片通常需要三种主要的物理内存类型&#xff1a;SRAM、Flash和DDR。 SRAM&#xff08;静态随机存储器&#xff09;&#xff1a;SRAM是一种高速、易访问和易擦写的存储器类型。它通常用于存储变量、缓冲区、堆栈和其他动态数据。SRAM的特点是读写速度快&#xff0c…

指针经典笔试题强训(附图详解)

目录 笔试题1&#xff1a; 解析&#xff1a; 运行结果&#xff1a; 笔试题2 解析&#xff1a; 运行结果&#xff1a; 笔试题3 解析&#xff1a; 运行结果&#xff1a; 笔试题4 解析&#xff1a; 运行结果&#xff1a; 笔试题5 解析&#xff1a; 运行结果&#xff1a;…

基于人工智能的状态监测帮助结束冷却塔的维护“噩梦”

冷却塔是将水蒸气冷却成较低温的水、将系统的废热排到大气层的排热装置&#xff0c;在工业生产中扮演着不可或缺的关键角色。大型工业冷却塔的主要用途是用来冷却在水冷系统中的循环水。这些水冷系统广泛应用于发电厂、炼油厂、石化厂、天然气制造厂、食品加工厂、半导体厂等工…

<C++> 类和对象(上) 面向对象

1.面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c; 通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 2.类 C语言结构…