c++ 共享内存

共享内存

一、查看所有的共享内存

(py37) hq@nuc:~/tmp/hq$ ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 4          blueberry  600        524288     2          dest
0x00000000 9          blueberry  600        524288     2          dest
0x00000000 14         blueberry  600        16777216   2          dest
0x44005658 22         blueberry  666        12         1
0x00000000 23         blueberry  600        299008     2          dest
0x00000000 24         blueberry  600        299008     2          dest
0x00000000 25         blueberry  606        7165584    2          dest
0x00000000 26         blueberry  606        7165584    2          dest
0x00000000 32804      blueberry  600        524288     2          dest
0x00000000 32807      blueberry  600        4194304    2          dest
  • key(键):共享内存段的标识符。它是共享内存的唯一标识,允许进程通过这个键来访问共享内存。

  • shmid(共享内存标识符):内核为共享内存段分配的唯一ID。

  • owner(所有者):拥有该共享内存段的用户ID。

  • perms(权限):共享内存段的权限。

  • bytes(字节数):共享内存段的大小,以字节为单位。

  • nattch(附加次数):附加到共享内存段的进程数。当进程附加(使用 shmat)或解除附加(使用 shmdt)时,此计数会相应增加或减少。

  • status(状态):共享内存段的状态信息,例如是否被附加,是否被删除等

二、创建共享内存

1、示例代码

include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>int main() {key_t key = ftok("/tmp", 'a'); // 生成一个键int shmid = shmget(key, 1024, IPC_CREAT | 0666); // 创建一个共享内存段if (shmid < 0) {perror("shmget");return 1;}char *str = (char*)shmat(shmid, nullptr, 0); // 连接到当前进程的地址空间if (str == (char*)(-1)) {perror("shmat");return 1;}std::cout << "Write data to shared memory: ";std::cin >> str; // 写入数据到共享内存shmdt(str); // 分离共享内存return 0;
}

2、查看共享内存情况ipcs -m

三、获取共享内存内容

#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>int main() {int shmid = 32808;char *shmaddr = (char*) shmat(shmid, (void*)0, 0); // 连接共享内存printf("Data read from memory: %s\n", shmaddr); // 读取共享内存中的数据shmdt((void*)shmaddr); // 断开连接shmctl(shmid, IPC_RMID, NULL); // 删除共享内存段return 0;
}

四、特性

1、共享内存在什么时候被回收?

  • 通常在进程结束后,需要手动释放回收

  • 系统重新启动

2、共享内存大小

  • 整个系统可用的共享内存大小,cat /proc/sys/kernel/shmmax

  • 每个进程可以使用的共享内存大小,cat /proc/sys/kernel/shmall

  • 消息队列也受到资源限制,cat /proc/sys/kernel/msgmnb

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

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

相关文章

力扣labuladong——一刷day54

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣1660. 纠正二叉树二、力扣100. 相同的树三、力扣572. 另一棵树的子树四、力扣101. 对称二叉树 前言 判断树是否相等&#xff0c;就直接遍历就可以。判断…

同为科技(TOWE)模块化定制化让每条PDU实现专属供电解决方案

作为追求最高功率和空间效率的动态数据中心的理想产品&#xff0c;模块化、定制化PDU是追求最高功率和空间效率的动态数据中心的理想产品。同为科技&#xff08;TOWE&#xff09;是我国PDU行业的开创者和领导者&#xff0c;曾率先于中国电源分配单元http://www.pdu.com.cn网站上…

机器学习实战第3天:手写数字识别

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 一、任务描述 二、数据集描述 三、主要代码 &#xff08;1&#xff09;主要代码库的说明与导入方法 &#xff08;2&#xff09;数据预…

2023-11-28 C语言if语句多个||或 与的时时候,会顺序执行,不满足条件则退出,不会再比较后面的内容,实例测试

一、if(i > 0 || image(0) > 5)或者if(i > 0 && image(0) > 5)&#xff0c;C语言if语句多个||或 与&&的时时候&#xff0c;会顺序执行&#xff0c;不满足条件则退出&#xff0c;不会再比较后面的内容。 二、测试代码 #include <stdio.h> #i…

题目标题:汽水瓶 c语言

1.问题描述 有这样一道智力题&#xff1a;“某商店规定&#xff1a;三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶&#xff0c;她最多可以换多少瓶汽水喝&#xff1f;”答案是5瓶&#xff0c;方法如下&#xff1a;先用9个空瓶子换3瓶汽水&#xff0c;喝掉3瓶满的&#x…

成为网络安全高手!教你如何做出专业级别的渗透测试

01、信息收集 1、域名、IP、端口 域名信息查询&#xff1a;信息可用于后续渗透 IP信息查询&#xff1a;确认域名对应IP&#xff0c;确认IP是否真实&#xff0c;确认通信是否正常 端口信息查询&#xff1a;NMap扫描&#xff0c;确认开放端口 发现&#xff1a;一共开放两…

Linux CentOS_7解决无法上网的问题

参考视频&#xff1a;保姆式教学虚拟机联网liunx(centos)_哔哩哔哩_bilibili 第一步&#xff1a;选择网络模式 第二步&#xff1a;配置网卡命令&#xff1a;打开终端执行命令&#xff1a; 1、先切换到根目录下&#xff0c;防止在第执行cd /etc/sysconfig/network-scripts命的…

java多线程-扩展知识一:进程线程、并发并行、同步异步

1、进程 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配的基本单位&#xff0c;是操作系统结构的基础。在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&#xff1b;在当代面向线程…

云计算——ACA学习 阿里云云计算服务概述

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 目录 写在前面 前期回顾 本期介绍 前言了解 一…

QCheckBox通过qss实现状态切换显示不同图标

QString qss "QCheckBox::indicator:unchecked{ \image:url(:/resources/status_close.png); \} \QCheckBox::indicator:checked { \image: url(:/resources/status_open.png); \}";ui->checkBox->setStyleSheet(qss);ui->checkBox->setChecked(true);

【领域驱动设计 学习目标及大纲】从CRUD到架构设计

从2018年至今&#xff0c;已工作了5年有余&#xff0c;回望这5年的工作历程&#xff0c;虽然一直在学习、一直在积累&#xff0c;但其实都在术的层面上停留&#xff0c;也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法&#xff1a; 一次是2018年刚工作的时候&am…

FPGA模块——AD高速转换模块(并行输出转换的数据)

FPGA模块——AD高速转换模块&#xff08;并行输出转换的数据&#xff09; &#xff08;1&#xff09;AD9280/3PA9280芯片&#xff08;2&#xff09;代码 &#xff08;1&#xff09;AD9280/3PA9280芯片 AD9280/3PA9280芯片的引脚功能&#xff1a; 工作电压2.7到5.5v 数据对应&a…

采购申请的库存地点和MRP2的库存地点的关系

F类材料的采购申请的库存地点&#xff0c;带外部采购申请仓储地点 X类材料的采购申请的库存地点,从MRP2的生产仓储地点自动带到计划订单再到生产工单再到采购申请。

linux线程详解

线程 c版本1、线程概述2、创建线程3、线程退出4、线程回收使用子线程栈使用全局变量使用主线程栈 5、线程分离6、其他线程函数线程取消 6.2 线程ID比较 C版本1、构造函数2、公共成员函数2.1 get_id()2.2 join()2.3 detach()2.4 joinable()2.5 operator() 3、静态函数4、C线程命…

MSTP实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 1、创建vlan 2、创建端口组&#xff0c;放通vlan 3、配置MSTP 4、配置主备奋根 一、实验拓扑 二、实验要求 1、所有交换机上创建vlan10&#xff0c;vlan20&#xff0c;vlan30和vlan40 2、所有交换机之间的端口配置为Trunk…

滑动窗口 -(LeetCode 209. 长度最小的子数组、904. 水果成篮)

跟着代码随想录完成了 leetcode 209.长度最小的子数组&#xff0c;学习到了滑动窗口的思想。于是做了904题。 题目意思是&#xff0c;遍历数组&#xff0c;找到包含两种元素的最长子串(字串就包含“连续”之意)&#xff0c;返回其长度。因此可以利用滑动数组的思想。 想法过程…

Redis(二):常见数据类型:String 和 哈希

引言 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&#xff0c;同时掌握每 种数据结构的常⻅命令&#xff0c;会在使⽤ Redis 的时候做到游刃有余。 Redis 的命令有上百种&#xff0c;我们不可能全部死记硬背下来&#xff0c;但是…

vue3---自定义插件注册全局对象

① 在src/components文件夹下创建index.ts&#xff1a;用于注册components文件夹下全部的全局组件 // 引入项目中的全部全局组件 import SvgIcon from ./SvgIcon/index.vue import Pagination from ./Pagination/index.vue// 定义全局组件对象&#xff1a;用于存放所有要引入的…

【小白进阶】Linux 调试大法——gdb

初衷 gdb调试是每一个后端开发工程师所必备的技能&#xff0c;我们工作总是会用gdb协助我们去分析和调试问题。但是大部分同学的技能仅停留在最基础的查看问题。即gdb program -->r --> 问题复现 --> bt 查看源码中的哪一行出现了错误。再稍微熟练点的&#xff0c;可能…

配置ssh 免密登录 还是要密码才能登录

确认公钥已经发送到目标服务器 ssh-copy-id 目标ip文件权限验证(id_rsa&#xff0c;id_rsa.pub&#xff0c;authorized_keys&#xff0c;known_hosts) -rw------- #authorized_keys -rw------- #id_rsa -rw-r--r-- #id_rsa.pub -rw-r--r-- #known_hosts.ssh目录权限验证 确…