Linux共享内存和Qt共享内存QSharedMemory的使用,今天你会了吗

您所在的位置:网站首页 共享内存的实现方式是什么 Linux共享内存和Qt共享内存QSharedMemory的使用,今天你会了吗

Linux共享内存和Qt共享内存QSharedMemory的使用,今天你会了吗

2024-07-13 06:21| 来源: 网络整理| 查看: 265

Linux共享内存和Qt共享内存QSharedMemory 一、Linux进程通信二、Linux共享内存使用1.基本使用步骤2.写共享数据3.读共享数据 三、Qt共享内存SharedMemory使用1.SharedMemory类介绍2.写共享数据3.读共享数据

一、Linux进程通信

Linux系统下进程通信的方式有很多:

管道(pipe)命名管道(FIFO)内存映射(mapped memeory)消息队列(message queue)共享内存(shared memory)信号量(semaphore)信号(signal)套接字(Socket)

共享内存允许两个或更多进程访问同一块内存。内存共享是使用的比较简单方便的一种了,简单的一些数据通信和文件共享,用内存共享非常方便。说起内存共享就得提一提多线程、多进程间的内存共享。线程之间的内存都是共享的。严格的说,同一进程的线程使用的是同一个地址空间,而不是在不同地址空间之间进行内存共享;父子进程间的内存共享。父进程以MAP_SHARED|MAP_ANONYMOUS选项mmap一块匿名内存,fork之后,其子孙进程之间就能共享这块内存。

二、Linux共享内存使用

Linux内存共享有几种不同的实现方式

基于传统SYS V的共享内存;基于POSIX mmap文件映射实现共享内存;通过memfd_create()和fd跨进程共享实现共享内存; 这里我们着重了解一下SYS V的共享内存。 首先来了解下共享内存原理, 在这里插入图片描述 当2个或者多个进程通过页表把虚拟内存地址映射到物理后,在物理地址就有一块共同能访问到的内存,就是内存共享区。A,B进程就可以操作这块区域进行数据的交换。 1.基本使用步骤 生成键值 key_t ftok(const char *path ,int id); 创建内存共享区 int shmget(key_t key, size_t size, int shmflg); 映射内存共享区 void *shmat(int shmid, const void *shmaddr, int shmflg); 解除映射 int shmdt(const void *shmaddr); 删除内存共享区 int shmctl(int shmid, int cmd, struct shmid_ds *buf); 2.写共享数据 #include #include #include #include #include #include #include int main() { key_t key = ftok(".",0x7777); if(key setPixmap(QPixmap::fromImage(image)); }

最终读出图片数据,显示如下。 在这里插入图片描述 Qt的共享内存key可以在实例化的时候把key带进去,也可以使用setKey函数进行key的设置。读写端key必须保持一致。 代码示例链接:https://download.csdn.net/download/haohaohaihuai/12566419

作者:费码程序猿 欢迎技术交流:QQ:255895056 转载请注明出处,如有不当欢迎指正



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3