【C++|Linux系统编程】共享内存
目录一、共享内存二、相关函数1、shmget函数2、shmat函数3、shmdt函数4、shmctl函数四、其它的操作命令原文链接:https://www.cnblogs.com/wucongzhou/p/12497864.html一、共享内存共享内存Shared Memory就是允许多个进程访问同一个内存空间是在多个进程之间共享和传递数据最高效的方式。操作系统将不同进程之间共享内存安排为同一段物理内存进程可以将共享内存连接到它们自己的地址空间中如果某个进程修改了共享内存中的数据其它的进程读到的数据也将会改变。共享内存并未提供锁机制也就是说在某一个进程对共享内存的进行读写的时候不会阻止其它的进程对它的读写。如果要对共享内存的读/写加锁可以使用信号量。二、相关函数Linux中提供了一组函数用于操作共享内存程序中需要包含以下头文件#includesys/ipc.h#includesys/shm.h1、shmget函数shmget函数用来获取或创建共享内存它的声明为intshmget(key_t key,size_t size,intshmflg);key是共享内存的键值是一个整数typedef unsigned int key_t是共享内存在系统中的编号不同共享内存的编号不能相同这一点由程序员保证。key用十六进制表示比较好。size是待创建的共享内存的大小以字节为单位。shmflg是共享内存的访问权限与文件的权限一样0666|IPC_CREAT表示全部用户对它可读写如果共享内存不存在就创建一个共享内存。2、shmat函数把共享内存连接到当前进程的地址空间。它的声明如下void*shmat(intshm_id,constvoid*shm_addr,intshmflg);shm_id是由shmget函数返回的共享内存标识。shm_addr指定共享内存连接到当前进程中的地址位置通常为空表示让系统来选择共享内存的地址。shm_flg是一组标志位通常为0。调用成功时返回一个指向共享内存第一个字节的指针如果调用失败返回-1.3、shmdt函数该函数用于将共享内存从当前进程中分离相当于shmat函数的反操作。它的声明如下intshmdt(constvoid*shmaddr);参数shmaddr是shmat函数返回的地址。调用成功时返回0失败时返回-1.4、shmctl函数删除共享内存它的声明如下intshmctl(intshm_id,intcommand,structshmid_ds*buf);shm_id是shmget函数返回的共享内存标识符。command填IPC_RMID。buf填0。解释一下shmctl是控制共享内存的函数其功能不只是删除共享内容但其它的功能没什么用所以不介绍了。注意用root创建的共享内存不管创建的权限是什么普通用户无法删除。/* * 程序名book258.cpp此程序用于演示共享内存的用法 * 作者C语言技术网(www.freecplus.net) 日期20190525 */#includestdio.h#includestring.h#includeunistd.h#includesys/ipc.h#includesys/shm.h//#include _public.hintmain(){intshmid;// 共享内存标识符// 创建共享内存键值为0x5005共1024字节。if((shmidshmget((key_t)0x5005,1024,0640|IPC_CREAT))-1){printf(shmat(0x5005) failed\n);return-1;}char*ptext0;// 用于指向共享内存的指针// 将共享内存连接到当前进程的地址空间由ptext指针指向它ptext(char*)shmat(shmid,0,0);// 操作本程序的ptext指针就是操作共享内存printf(写入前%s\n,ptext);sprintf(ptext,本程序的进程号是%d,getpid());printf(写入后%s\n,ptext);// 把共享内存从当前进程中分离shmdt(ptext);// 删除共享内存// if (shmctl(shmid, IPC_RMID, 0) -1)// { printf(shmctl(0x5005) failed\n); return -1; }}四、其它的操作命令用ipcs -m可以查看系统的共享内存内容有键值key共享内存编号shmid创建者owner权限perms大小bytes。用ipcrm -m 共享内存编号可以手工删除共享内存

相关新闻

PowerPaint-V1批量处理设想:如何快速修整一组产品图片

PowerPaint-V1批量处理设想:如何快速修整一组产品图片

PowerPaint-V1批量处理设想:如何快速修整一组产品图片 1. 从单张修图到批量处理:一个真实的电商痛点 如果你在电商公司待过,或者自己开过网店,一定对下面这个场景不陌生:新到了一批产品,需要上架。摄影师…

2026/7/4 15:52:35 阅读更多 →
w3x2lni:魔兽地图跨版本转换与优化全指南

w3x2lni:魔兽地图跨版本转换与优化全指南

w3x2lni:魔兽地图跨版本转换与优化全指南 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni w3x2lni是一款专业的魔兽地图格式转换工具,旨在解决不同版本魔兽争霸III地图文件的兼容性问题。该…

2026/7/4 15:52:03 阅读更多 →
5分钟解决文献引用提取难题:Reference Extractor全攻略

5分钟解决文献引用提取难题:Reference Extractor全攻略

5分钟解决文献引用提取难题:Reference Extractor全攻略 【免费下载链接】ref-extractor Reference Extractor - Extract Zotero/Mendeley references from Microsoft Word files 项目地址: https://gitcode.com/gh_mirrors/re/ref-extractor 您是否经历过文献…

2026/7/4 3:42:20 阅读更多 →

最新新闻

基于YOLO26的课堂行为分析系统设计与优化

基于YOLO26的课堂行为分析系统设计与优化

1. 项目背景与核心价值 在传统课堂观察中,教师需要分散注意力记录学生状态,这种人工观察方式存在三个显著痛点:主观性强(不同教师标准不一)、覆盖范围有限(难以同时关注全班)、数据留存困难&…

2026/7/4 15:52:33 阅读更多 →
MLOps生产部署实战:模型服务分层架构与三维监控体系

MLOps生产部署实战:模型服务分层架构与三维监控体系

1. 项目概述:这不是“跑通模型”,而是让模型在真实世界里活下来“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句行话暗号,老手一眼就懂:前面三篇已经蹚过了数据清洗、特征工程、…

2026/7/4 15:52:33 阅读更多 →
当老板走近时:3分钟学会用Boss-Key打造你的数字安全空间

当老板走近时:3分钟学会用Boss-Key打造你的数字安全空间

当老板走近时:3分钟学会用Boss-Key打造你的数字安全空间 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 你是否经历过这样的尴…

2026/7/4 15:50:33 阅读更多 →
机器学习可解释性实战:从监管合规到业务落地的完整工程指南

机器学习可解释性实战:从监管合规到业务落地的完整工程指南

1. 项目概述:为什么“模型能解释”比“模型很准”更难搞你训练出一个准确率98.7%的信贷风控模型,银行却拒绝上线——不是因为不准,而是因为当它拒绝一位申请人时,业务经理问:“为什么?”你答不上来。这场景…

2026/7/4 15:48:32 阅读更多 →
时序模型基础与实战:从ARIMA到SARIMA应用指南

时序模型基础与实战:从ARIMA到SARIMA应用指南

1. 时序模型基础认知 时序模型(Time Series Model)是数据分析领域的经典工具,专门用于处理按时间顺序排列的观测值集合。这类数据在金融、气象、工业等领域无处不在,比如股票价格逐日波动、城市气温每小时变化、工厂设备每分钟传感…

2026/7/4 15:46:32 阅读更多 →
M24C04-R与MK64FN1M0VDC12的嵌入式存储方案实践

M24C04-R与MK64FN1M0VDC12的嵌入式存储方案实践

1. 为什么选择M24C04-R与MK64FN1M0VDC12组合 在嵌入式系统中,非易失性数据存储是个永恒的话题。我最近在一个工业控制项目中,需要存储设备参数和运行日志,经过多次对比测试,最终选择了M24C04-R EEPROM与MK64FN1M0VDC12 MCU的组合方…

2026/7/4 15:44:31 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻