linux之共享内存是什么

Linux——详解共享内存shared memory_linux 共享内存 共享内存本质上就是内存中的一块区域,用于进程间通信使用。该内存空间由操作系统分配与管理。与文件系统类似的是,操作系统在管理共享内存时,不仅仅有内存数据块,同时还会创建相应结构体来记录该共享内存属性,以便于管理。因此,共享内存不只有一份,可以根据需求申请多个。进程之间进行通信的时候,会获取 到共享内存的地址,写端进程写入数据,读端进程通过直接访问内存完成数据读取。 阅读详情

共享内存直接操作物理内存,不需要拷贝,它通过向内核申请一块内存,映射到进程自身的虚拟地址空间中

可以直接读写这个进程的空间,提高效率。

可以通过ipcs -m 命令查看共享内存的有关信息。

写操作:

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

#define BUFFER_SIZE 1024

int main()
{
	key_t key=ftok(".",1);
	if(key==-1)
	{
		printf("Create key failed\n");
		return -1;
	}	

    //申请获取一个共享内存
	int shmid=shmget(key,BUFFER_SIZE,IPC_CREAT|0666);
	if(shmid==-1)
	{
		printf("Create shmid failed\n");
		return -1;
	}

    //内存映射
	char *shmaddr=shmat(shmid,NULL,0);
	if(shmaddr==(void*)-1)
	{
		printf("Get shmaddr failed\n");
		return -1;
	}
	
	strcpy(shmaddr,"hello linux\n");

	return 0;

}

 

读操作:

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

#define BUFFER_SIZE 1024

int main()
{
	key_t key=ftok(".",1);
	if(key==-1)
	{
		printf("Create key failed\n");
		return -1;
	}	

    //申请一块共享内存
	int shmid=shmget(key,BUFFER_SIZE,IPC_CREAT|0666);
	if(shmid==-1)
	{
		printf("Create shmid failed\n");
		return -1;
	}

    //把申请的共享内存链接到内核的某一个地址上(内存映射)
	char *shmaddr=shmat(shmid,NULL,0);
	if(shmaddr==(void*)-1)
	{
		printf("Get shmaddr failed\n");
		return -1;
	}

	printf("Data is:%s\n",shmaddr);
    printf("shmid is:%d\n",shmid);

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

	return 0;

}

输出端:

【linux】共享内存 分配共享内存 使用shmget函数来分配,首先来看shmget里的参数 该函数的第一个参数是一个用来标识共享内存块的键值。彼此无关的进程可以通过指定同一个键以获取对同一个共享内存块的访问。不幸的是,其它程序也可能挑选了同样的特定值作为自己分配共享内存的键值,从而产生冲突。用特殊常量IPC_PRIVATE作为键值可以保证系统建立一个全新的共享内存块。 该函数的第二个参数指定 阅读详情

相关推荐

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9204

linux共享内存介绍

由于进程通信的本质是要让两个不同的进程看到同一份资源,我们可以在物理内存上开辟一块空间,这块空间被称为共享内存,然后让这两个进程通过某种方式都能访问到这块内存,这样的话,两个进程之间就可以通信了。...

qq_34888036的博客 5805

从零构建AI智能体:基于opencode框架的Agent开发全流程指南

AI智能体(AI Agent)作为人工智能领域的重要发展方向,正从概念走向工程实践。其核心原理在于赋予AI自主规划、执行和迭代的能力,使其不再局限于简单的问答,而是能够理解复杂目标、分解任务、调用工具并完成闭环。这一技术价值在于将AI从“对话伙伴”升级为“执行伙伴”,极大地拓展了自动化边界,在智能客服、数据分析、自动化运维等场景展现出巨大潜力。本文聚焦于如何利用opencode这一热门开发框架,快速构建具备实际能力的智能体。通过拆解其核心组件如技能库、规划器与运行时,并结合具体实践案例,系统阐述了从环境搭建

weixin_29055699的博客 433

Linux——详解共享内存shared memory

共享内存本质上就是内存中的一块区域,用于进程间通信使用。该内存空间由操作系统分配与管理。与文件系统类似的是,操作系统在管理共享内存时,不仅仅有内存数据块,同时还会创建相应结构体来记录该共享内存属性,以便于管理。因此,共享内存不只有一份,可以根据需求申请多个。进程之间进行通信的时候,会获取 到共享内存的地址,写端进程写入数据,读端进程通过直接访问内存完成数据读取。

weixin_61857742的博客 1万+

锐捷交换机堆叠配置举例

一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是...

dongsheng_9234的专栏 8283

‌NTRU算法详细教程 | 2025年最新版(基于NIST后量子密码标准更新)

‌:NTRU是当前抗量子加密的黄金标准,‌。

blns_yxl的博客 1802

Linux共享内存

共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。

github_73587650的博客 3547

李宏毅机器学习笔记第17周_概述领域自适应(Domain Adaptation)

Domain Adaptation

peaunt1的博客 1102

Linux 共享内存

创建共享内存:在Linux系统中,可以使用shmget函数来创建一个共享内存标识符。该函数需要指定共享内存的大小、权限等参数,并返回一个唯一的标识符。连接共享内存:使用shmat函数将进程与共享内存进行连接,该函数需要传入共享内存标识符和一个用户指定的地址,如果地址为0,则由系统选择一个可用的地址。使用共享内存:连接成功后,进程可以像使用普通内存一样使用共享内存,通过读写共享内存实现进程间的数据交换。分离共享内存:使用shmdt函数将进程与共享内存分离,分离后进程不能再访问共享内存。

小灰灰的博客 3035

Camera | 瑞芯微rk3568平台MIPI-CSI驱动:从设备树到V4L2框架的完整链路解析

本文深入解析瑞芯微rk3568平台MIPI-CSI驱动的完整链路,从设备树配置到V4L2框架集成。详细介绍了rk3568的MIPI-CSI驱动架构、设备树关键节点布局、驱动初始化流程及数据流路径,帮助开发者快速掌握摄像头控制器的调试与优化技巧,实现稳定的视频采集系统。

weixin_28703489的博客 289

STM32使用ASR01语音播报模块

自己再根据鹿小班模块进行操作进行相关操作,先接上usb数据线。这里提供一套修改好的天问程序模板和stm32f103模板。这里使用的asr01语音播报模块是模块化编程。这里使用的asr01语音播报模块是模块化编程。记得先生成模型再去编译下载。先下载天问block软件。

lml1781978327的博客 1万+

【Linux】共享内存

共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。

zxj20041003的博客 1944

手把手教你学Simulink——基础电机控制场景实例:基于Simulink的永磁同步发电机温度场耦合仿真

摘要:本文详细介绍了基于Simulink的永磁同步发电机(PMSG)电-热耦合仿真方法。通过Simscape Electrical搭建含热端口的PMSG模型,结合集总参数热网络(LPTN)实现损耗计算与温度反馈,分析了过载工况下温升对电阻和永磁体性能的影响。仿真结果表明:150%过载20秒会导致绕组温升132°C,电阻增加42%,磁链衰减10.5%。文章还提供了自然冷却与强迫风冷的对比数据,并建议通过多物理场耦合仿真预防实机过热问题。该方法可有效支撑高功率密度电机热设计,避免永磁体退磁风险。

MHD0815的博客 250

【Linux】——共享内存

1、共享内存的定义和原理 2、特点 3、共享内存的使用 4、应用 5、进程间通信的几种方式总结

qq_43412060的博客 2950

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

初识Linux · 共享内存

size代表的是开辟的共享内存的大小,对于shmflg,也就是共享内存的标志,我们这里就介绍两个常用的,一个是IPC_CREAT 一个是IPC_EXCL,使用时候我们可以分为IPC_CREAT使用,IPC_EXCL单独使用没有意义,IPC_CREAT | IPC_EXCL使用。其中key是16进程的,所以我们前面会转成16进程的方便观察,shmid是0,owner是lazy,perms权限为0,共享内存的大小是4096,nattch对应的是0,代表的意思是挂接的进程为0,status状态。

更新各种计算机技能~ 1606

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux——共享内存

Linux——共享内存

qq_67693066的博客 2182

linux共享内存

共享内存概念: ;获取或申请共享内存 ;映射共享内存到进程的虚拟空间 ;解除映射 ;删除共享内存:

qq_54075859的博客 2308

linux共享内存好处,linux共享内存

linux共享内存的设计posix的共享内存是通过用户空间挂在的tmpfs文件系统实现的,而system V的共享内存是由内核本身的tmpfs实现的,这里可以看出,二者其实是用同一种机制实现的,不同的是用户接口不同,posix旨在提供一套统一的可用接口而不是实现,因此posix的上层根本就不会在意其机制是内核实现的还是用户空间实现的,因此用文件系统实现再好不过了,在linux上它实际上是通过用户空...

weixin_33895652的博客 449
上一篇: 玩一下linux下的消息队列
下一篇: 多线程的基本概念和几种同步方式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值