【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/5/17 10:33:47 阅读更多 →
w3x2lni:魔兽地图跨版本转换与优化全指南

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

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

2026/5/17 10:33:46 阅读更多 →
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 阅读更多 →

最新新闻

工业级多通道信号采集系统设计与优化实践

工业级多通道信号采集系统设计与优化实践

1. 工业级多通道信号控制系统的核心需求解析在工业自动化、电力监测和精密仪器领域,多通道信号采集与控制系统一直是核心基础设施。这类系统需要同时处理多个传感器信号(如温度、压力、电压等),并对执行机构进行精确控制。传统方案…

2026/7/4 14:58:21 阅读更多 →
如何高效处理Enigma Virtual Box打包文件:evbunpack工具详解

如何高效处理Enigma Virtual Box打包文件:evbunpack工具详解

如何高效处理Enigma Virtual Box打包文件:evbunpack工具详解 【免费下载链接】evbunpack Enigma Virtual Box Unpacker / 解包、脱壳工具 项目地址: https://gitcode.com/gh_mirrors/ev/evbunpack 你正在处理一个Enigma Virtual Box打包的文件,需…

2026/7/4 14:54:17 阅读更多 →
LV30条码扫描器与PIC18F4685微控制器的嵌入式解码方案

LV30条码扫描器与PIC18F4685微控制器的嵌入式解码方案

1. LV30条码扫描器与PIC18F4685微控制器的技术背景 LV30是一款高性能的线性影像式条码扫描引擎,采用先进的CMOS图像传感器技术,能够从各种介质(包括纸张、塑料、金属、玻璃等)表面捕获条码图像。其核心优势在于: 支持…

2026/7/4 14:50:15 阅读更多 →
Kimi赴港IPO:中文AI原生应用的价值重估与商业化验证

Kimi赴港IPO:中文AI原生应用的价值重估与商业化验证

1. 项目概述:这不是一次普通IPO,而是一场AI公司价值重估的临界点“媒体称Kimi正考虑赴港IPO,估值约180亿美元,如何看待Kimi选择在此时冲击上市?”——这句话背后藏着的,远不止一家AI公司的资本动作。作为国…

2026/7/4 14:48:15 阅读更多 →
2026多端AI视频字幕提取指南:免费与付费视频转文字工具实操教程

2026多端AI视频字幕提取指南:免费与付费视频转文字工具实操教程

日常剪辑创作、网课学习、职场会议记录、短视频文案拆解,都需要把视频人声转化为可编辑文字,市面上覆盖电脑、手机、网页在线形态的 AI 视频转文字工具数量繁多,不同工具在多语言支持、文字识别精度、收费模式、使用门槛上差异明显。本文按照…

2026/7/4 14:46:14 阅读更多 →
MC74HC165A与PIC18LF25K40实现高效数字输入扩展方案

MC74HC165A与PIC18LF25K40实现高效数字输入扩展方案

1. 项目背景与核心价值在嵌入式系统开发中,处理多路数字输入信号是常见需求。传统方案需要为每个输入信号分配独立的GPIO引脚,当系统规模扩大时,这会导致引脚资源紧张、布线复杂和成本上升。MC74HC165A作为8位并行输入/串行输出移位寄存器&am…

2026/7/4 14:44:13 阅读更多 →

日新闻

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 阅读更多 →

周新闻

月新闻