IPC--共享内存

QComboBox设置最大显示数量多余的用滑动条,以及QComboBox::setMaxVisibleItems()不起作用的问题 QComoboBox是Qt封装的一个选择框的东西,但是我在使用过程中有一点感觉很不好,如图: 不论你往里面添加多少个它都会给你显示全部,甚至给你铺满全屏,后来看了官方文档发现有个setMaxVisibleItems()的方法,我欣喜若狂啊,终于特么的能解决了,但是,很遗憾,不知为啥,我设置上之后并没有起作用,依然会显示全部,后来搜了百度发现有个人是这样解决的 QComboBox *box = ne... 阅读详情

有了之前的学习经验,共享内存对我们学习起来相对简单一些了,这里简单说说共享内存的一些,然后对于函数的分析直接在代码里面的注释部分有说明,如果还是不懂,可以先看看前面的关于IPC–信号量还有IPC–消息队列的讲解

共享内存以传递数据为目的,速度最快,不需要数据在内存还物理内存的来回的拷贝,直接访问访问虚拟地址空间

共享内存没有同步与互斥机制,这个时候我们可以结合着IPC–信号量进行进程间通信

下面我们直接粘贴代码

client.c

#include"comm.h"


int main()
{
    int shmid = getShm(0);
    int i = 0;
    char* arr = (char*)shmat(shmid,NULL,0);
    while(1)
    {
        sleep(1);
        printf("%s\n",arr);
        i++;
        if(i==25)
            break;
    }
    int dt =  shmdt(arr);
    if(dt < 0)
    {
        perror("shmdt\n");
        return -1;
    }
    return 0;
}

comm.c

#include"comm.h"

static int commShm(int size,int flag)   //size:共享内存的大小,flag:进行何种操作,是获取还是创建
{
    key_t key = ftok(PATHNAME,ID);
    if(key < 0)
    {
        perror("key_t\n");
        return -1;
    }
    int shmid = shmget(key,size,flag);  //key:键值,size:大小,这里传入的大小最好是4k(4096)的倍数
                                    //因为4096是一页,如果我们传递的是4097,系统会自动的对齐到8192,
                                    //但是因为我们申请的是4097,剩下的内存系统不会给你,flag:创建方式
    if(shmid < 0)
    {
        perror("shmget\n");
        return -2;
    }
    return shmid;
}

int creatShm(int size) //size:创建内存空间的大小
{
    return commShm(size,IPC_CREAT|IPC_EXCL|0666);
}


int getShm(int size)
{
    return commShm(size,IPC_CREAT);   //size:默认设置为0
}


int desShm(int shmid)
{
    int des = shmctl(shmid,IPC_RMID,NULL);    //shmid:删除的是哪一个共享内存,IPC_RMID:控制方式,这里是删除的意思
                                            //NULL:这里是struct shmid_ds *buf,这是一个维护共享 内存的一个结构体
                                            //暂时不关心
    if(des < 0)
    {
        perror("shmctl\n");
        return -1;
    }
    return des;
}



comm.h

#ifndef _COMM_H_
#define _COMM_H_


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

#define PATHNAME "."
#define ID 0x6666

int creatShm(int size);
int getShm(int size);
int desShm(int shmid);



#endif

server.c

#include"comm.h"


int main()
{
    int i = 0;
    int shmid = creatShm(27);
    char* arr = (char*)shmat(shmid,NULL,0);   //这里可以把shmat当成是malloc使用,shmid:信号量标识符
                                        //NULL:const void* shmaddr,虚拟地址空间,设置为NULL,这个是系统自己定义的
                                        //返回值void* 这个时候我们要强制转换成我们需要的类型
    for(;i<26;)
    {
        sleep(1);
        arr[i] = 'A' + i;   //这里可以直接当成是malloc开辟的一个数组使用
        i++;
        arr[i] = 0;
    }
    int dt =  shmdt(arr);   //arr:这个就是我们上面的那个内存空间地址
    if(dt < 0)
    {
        perror("shmdt\n");
        return -1;
    }
    desShm(shmid);
    return 0;
}
【经验&技巧】DDR仿真中的挑战与解决方案 由于DDR的数据总线具备双向数据传输功能,需要对读写模式进行独立仿真环境的创建,并且分为连续和突发模式,再加之有单端和差分信号、有数据总线和地址总线,需要在数据传输过程中额外注意串扰的影响,并选择合适的驱动和负载以找寻设计裕量与串扰强度之间的平衡,因此,实际操作步骤和分析过程还是较为繁琐耗时的,需要设计者具有足够的耐心。 阅读详情

相关推荐

树莓派4B:控制步进电机

文章目录准备阶段接线阶段树莓派程序 准备阶段 准备以下物品,淘宝都可以买到: 57步进电机 电源开关(220v转24v,3A,72W) 步进电机驱动器 电源线 电线 杜邦线 树莓派4B一套 具体型号如下: 接线阶段 整体:接线效果如下图 电源开关起220v转24v作用,很好接线,输出24v接入步进电机驱动器 步进电机驱动器的 A+ A- B+ B- 按提示接步进电机四线,步进电机上就会有说...

学习路上的鸭子的博客 1万+

进程间通信IPC-共享内存

进程间通信共享内存

Hbw_aini的博客 2303

【技术分享】语音多模态LLM越狱

语音多模态LLM越狱攻击作为一种新兴安全威胁,揭示了多模态模型在语音输入场景下的脆弱性。尽管已有多种攻击方法被提出,但其具体实现步骤、防御措施的有效性及行业影响等问题仍需进一步探索[9]。未来研究应聚焦于改进模型架构、开发针对性防御策略,并评估语音输入越狱攻击的实际危害。只有通过全面理解这些挑战,才能为多模态智能系统的安全性提供更可靠的保障。说到语音多模态LLM越狱的具体实现步骤,这其实是一个复杂且多层次的过程🧐。首先,攻击者需要深入分析目标模型的响应模式和安全机制,找出可能的漏洞点。

qq_29883477的博客 1261

IPC通信--共享内存

在进程B中,同样创建一个共享内存对象并将其连接到已存在的共享内存段。然后,等待一段时间以便其他进程可以写入数据。接着,从共享内存中读取数据并打印出来。然后,将数据写入共享内存。最后,分离共享内存对象。在进程A中,首先创建一个共享内存对象并将其连接到已存在的共享内存段。然后,将数据写入共享内存,并等待一段时间以便其他进程可以读取数据。接着,从共享内存中读取数据并打印出来。最后,分离共享内存对象。,以便在不同的进程之间共享内存。,以便在多个进程之间共享内存。用于连接进程和共享内存。用于获取共享内存,而。

weixin_41885845的博客 2015

激光雷达+相机标定避坑指南:手把手教你用KITTI数据完成坐标转换

本文详细介绍了激光雷达与相机标定的实战指南,利用KITTI数据集完成精准坐标转换。从数据准备、工具链搭建到标定矩阵加载与验证,再到坐标转换流水线的工程实现,提供了全面的避坑技巧和工程实践建议。特别强调了多传感器融合中的常见问题及解决方案,帮助开发者提升自动驾驶和机器人感知系统的环境感知精度。

book8的博客 835

我花3年踩坑总结的C#上位机开发指南:从零基础到项目落地(附实战案例)

串口乱码:编码格式不匹配,一定要和设备端确认;PLC连接超时:检查IP地址和端口,确保上位机和PLC在同一网段;界面卡死:耗时操作没开线程,WinForm用BackgroundWorker,WPF用Task;数据解析错误:寄存器地址算错(Modbus地址从0还是1开始);Modbus数据丢包:加CRC校验,重要数据重发机制;WPF绑定不生效:忘记实现INotifyPropertyChanged;项目打包失败:缺少依赖DLL,用Dependency Walker检查;现场环境不兼容。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1843

IPC<进程间通信>之共享内存-源代码在结尾处

介绍了共享内存的通信原理,以及使用代码对原理进行讲解,介绍了相关的一些函数的使用,源代码在文章的结尾处。

Javaxaiobai的博客 803

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 129

(IPC)进程间通信的常用的两种方式——管道、共享内存

众所周知,不同的进程之间,在正常情况下,由于其拥有独立的PCB、上下文等原因,每个进程都是独立且互不干扰,这不仅保证了进程的安全,也降低了OS对于进程的管理成本。 但是通常情况下,一个需求或项目将会被多个进程分解成小板块的并发或串行进行,以达到提高效率、降低管理成本、提高开发速度的目的,这就带来的问题是原来进程间的互不干扰,反而成为了进程间的墙壁,但是直接打开墙壁又是不可取的,所以进程通信就由此而生了!

qq_68140277的博客 1272

(一)企业微信 - 会话内容存档

企业微信获取会话记录。

专打丶小豆豆的博客 2892

基于深度学习的电力系统暂态稳定评估与预防控制复现

本文复现了基于深度学习的电力系统暂态稳定评估与预防控制方法。主要内容包括:(1)数据预处理环节,对IEEE 39节点系统的电压幅值、相角等特征数据进行归一化处理;(2)ACNGAT模型实现,该模型结合时间卷积网络(TCN)和图注意力网络(GAT)提取时空特征;(3)采用改进的帝企鹅优化算法进行预防控制。关键技术点包括:融合时空信息的特征提取、改进的邻接矩阵构建方法(λ_ij = E_i * E_j * B_ij)以及时空注意力机制。代码实现采用Python和PyTorch框架。

huanghm88的专栏 336

【Linux】详解IPC:共享内存

探讨了 Linux 共享内存作为 IPC(进程间通信)技术在操作系统中的重要应用。通过详细介绍共享内存的创建、连接、控制和删除等关键步骤,结合代码示例和实验测试,展示了共享内存如何实现高效、可靠的进程间通信。

No Game No Life 2359

备战数学建模38-粒子群算法pso番外篇1(攻坚战2)

粒子群算法最初是根据鸟类群体行为得到的启发,对鸟群行为进行仿真的算法,是一种启发式算法,也就是智能优化算法,利用信息共享,通过中间信息进行改进搜索,从而获得问题的可行解。我们简单从下图去体会一下粒子群算法,就是有多个鸟,每个鸟相当于一个粒子,每只鸟的位置受自己认知的历史最佳位置和当前距离食物最近的鸟的位置的影响。我们进一步分析这个图,可以得到两个公式,第一个是速度公式,即每只鸟的当前速度受上一步的速度惯性,自我认知和社会认知三部分影响,第二个是位置公式,即每只鸟的位置受上一位置和上一位置的速度的影响。

nuist_NJUPT的博客 1666

IPC之共享内存

共享内存 * 最快的IPC,因为操作共享内存不用涉及进程-内核的数据拷贝 * 不同进程间操作共享内存需自己做同步机制,比如使用信号量等 数据结构shmid_ds(#include) struct shmid_ds{ struct ipc_perm shm_perm; /* 操作权限*/ int shm_segsz;

依然的专栏 1448

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 共享内存ipc_进程间通信——IPC之共享内存

共享内存是三个IPC机制中的一个。它允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式。大多数的共享内存的实现,都把由不同进程之间共享的内存安排为同一段物理内存.首先我们都知道我们执行的每一个程序,它看到的内存其实都是虚拟内存,虚拟内存需要进行页表的映射将进程地址映射到物理内存,具体处理大致如下面的图共享内存特点和优势当中共享内存的大致原理相信我...

weixin_35943493的博客 2559

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

多进程ipc之共享内存

进程间通讯(ipc)之共享内存: (1)进程间通讯比较快速的一种,常与信号量一起操作 (2)本质是进程间使用同一块内存 (3)因为进程间使用的是同一块内存,因此在一个进程间改变了共享内存里的数据,其他进程中的同一块共享内存的数据也会随之被改变 这是关于ipc的一些操作,点击跳转 我们换个通俗点的说法:现在有小红和小绿,他们是合租室友;但是呢,他们租的房子里面只有一间浴室,然后约定浴室里面地洗发水一起买来用,为了防止别人来他们房子用他们的浴室(就当为了省买洗发水的钱和水费),然后他们就给浴室上了锁,

takashi77的博客 539

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux SysV IPC shm共享内存实现

共享内存可以使多个进程共享某段内存,由于不需要进程间数据复制,所以是速度最快的IPC。 多个进程访问共享内存时需要同步机制,如进程A往共享内存中写数据时,进程B不能使用共享内存;通常采用信号量同步多进程访问共享内存。 共享内存实现主要有以下几点: 1.分配物理内存 2.将物理内存映射到进程的地址空间;通过修改进程的页表,可以虚拟地址直接访问物理内存 3.进程不再使用共享内存时,取消物理内

永无止境 4574

Linux——System V 共享内存 IPC

共享内存通信原理与实现 共享内存是最高效的IPC通信方式,通过将物理内存映射到多个进程地址空间实现数据共享。其核心步骤包括: 创建共享内存:使用shmget函数,通过key标识内存段,设置权限和大小 内存映射:通过shmat将共享内存附加到进程地址空间 通信操作:进程可直接读写共享内存区域 资源释放:使用shmdt解除映射,shmctl或命令行删除共享内存 特点: 通信速度快(不经过内核) 双向通信能力 需要手动管理同步问题 生命周期与内核相同,需显式释放 关键参数: key:系统级标识(通常由ftok生成

二哈的博客 941

Linux IPC(共享内存)

让两个不同的进程看到同一个内存块(存在于物理内存当中)实现共享内存,看到同一份资源。

weixin_48133237的博客 906

IPC学习之共享内存

在两个或多个进程共享一个公共的内存空间来进行数据的交换共享内存是IPC方式中最快的,但是也有一定的局限性:若多个进程在同时进行写操作时,共享内存中的数据会出现问题,经常会和信号量一起配合使用。 2.写入数据到共享内存 shmw.c 运行结果 总结 如果先执行./r会使进程阻塞,直到共享内存空间有数据可以读...

Mount姚的博客 501

Linux内核IPC源码——共享内存

0]. sem->count的数值>=0, 如果count>0, 说明当前信号量没有被占用, 可以获取;如果countlist来添加等待任务或者唤醒任务;[0]. 定义信号量结构体变量;[1]. 初始化信号量变量。

生活需要深度 921

Linux IPC对象——共享内存

IPC对象学习——共享内存(1)描述(2)特点(3)共享内存使用步奏1.shmget函数创建共享内存2.shmat 映射3.shmdt 撤销映射4.shmctl 删除共享内存对象 (1)描述 (1)IPC对象包括: 共享内存、消息队列、信号灯集 (2)每个IPC对象都有唯一的ID值——key (3)IPC对象创建后,直到进程结束,系统会默认释放(在服务器上可能不行),当然人为撤销最好 (4)每个 IPC 对象都有对应的 key值 ,当key为 0 时,表示为 私有的共享内存,否则key 和 ID 对应相同

正弦定理的博客 663

Linux-IPC之共享内存

System V(标准)共享内存机制: shmget  shmat  shmdt  shmctl 原理及实现:system V IPC机制下的共享内存本质是一段特殊的内存区域,进程间需要共享的数据被放在该共享内存区域中,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间(虚拟地址空间)中去。这样一个使用共享内存的进程可以将信息写入该空间,而另一个使用共享内存的进程又可以通过简单的

一个写程序的 1123

IPC通信之共享内存

IPC进程通信之共享内存

rushing的博客 505

ipc共享内存

其中,共享内存是一种 IPC 的方式,允许多个进程访问同一块内存区域,从而实现数据共享。这段代码创建了一个共享内存对象,将其映射到进程地址空间,然后在共享内存中写入数据,并从中读取数据。总的来说,IPC 共享内存是一种高效的进程间通信方式,适用于需要频繁交换大量数据的场景,但需要注意同步、互斥和安全性等方面的考虑。请注意,这只是一个简单的示例,实际应用中可能需要更复杂的同步和互斥机制来确保数据的完整性和一致性。:共享内存的访问需要考虑安全性,确保只有授权的进程可以访问和修改共享内存中的数据。

sunfanup的博客 533

IPC-共享内存

共享内存无内置数据类型,进程间需提前约定 “协议”(如结构体格式、数组长度)。(查询状态、修改权限、销毁内存等),是共享内存生命周期管理的核心函数。共享内存是最快的 IPC 方式,但因多个进程可直接读写,共享内存的核心操作依赖以下函数,需包含头文件。创建新共享内存,或获取已存在的共享内存,返回。,让多个进程直接映射到自己的地址空间,实现。断开当前进程与共享内存的映射关系(,返回可直接操作的内存指针。共享内存是 Linux 中。擦除旧数据),使用后需。IPC - 共享内存。IPC - 共享内存。

m0_74186706的博客 911
上一篇: IPC--信号量
下一篇: 线程
NeilZhy
博客等级 码龄11年 175粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值