shm 共享内存

2024-04-20 16:20
文章标签 共享内存 shm

本文主要是介绍shm 共享内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

shm 共享内存

  • 0,命令
  • 1,了解:
  • 2,程序:

0,命令


ipcs 查看分配的共享内存ipcrm -m shmid 删掉分配的共享内存

1,了解:

1),进程通信的一种

2),地址映射出来后,就不用到内核里面去读取了,所以是一种高效的进程通信方式

3)一些函数

shmget创建一段用来共享的内存

shmat地址映射

shmdt删除映射出来的一段内存

shmctl删除最根本的一段内存

2,程序:

在这里插入图片描述

  • main.c
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>int main(){int shmid;pid_t pid;char * s_addr,* p_addr;shmid =shmget( IPC_PRIVATE , 1024 , 0777);if(shmid < 0){printf("分配失败\n");exit(1);}printf("shmid:(%d)的这段共享内存申请成功,大小为1024个字节\n",shmid);pid = fork();if(pid > 0){p_addr = shmat(shmid,NULL,0);strncpy(p_addr,"hello",5);printf("向共享内存中写入hello\n");wait(NULL);exit(0);}else if(pid ==0){sleep(2);s_addr = shmat(shmid,NULL,0);printf("读取到共享内存:(%s)\n",s_addr);int ret = shmctl(shmid, IPC_RMID, NULL);if(0 == ret){printf("id为[%d]的这段共享内存,删除成功\n",shmid);}exit(0);}return 0;}
  • run.sh
#!/bin/bashecho "hello world-begin"echo "可以通过ipcs查看申请的共享内存"echo "可以通过ipcrm -m shmid删除这段共享内存"gcc main.c -o mainecho "hello world-end"
  • 运行
    请添加图片描述

这篇关于shm 共享内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920743

相关文章

【Linux】Linux 共享内存:高效的进程间通信

文章目录 Linux 共享内存:高效的进程间通信1. 什么是共享内存?2. 共享内存的实现步骤2.1 创建共享内存2.2 映射共享内存2.3 读写共享内存2.4 解除映射和删除共享内存 3. 共享内存的同步问题信号量示例: 4. 共享内存的优势与劣势优势:劣势: 5. 使用场景6. 结论 Linux 共享内存:高效的进程间通信 共享内存(Shared Memory)是 Li

c++ linux——进程共享内存

共享内存概念: 每个进程的虚拟内存对应一块物理地址,如果两个进程需要共享某一块内存,则各自的虚拟内存会有一小块映射到同一片物理地址上。是最高效的进程间通信方式。 关键就是四个函数 shmget(创建或者获取现有的共享内存标识符) shmat (将共享内存挂接到当前进程) shmdt(共享内存与当前进程取消挂接) shctrl(删除共享内存或者改变权限) 举例实现: 进程1 #include<sy

进程间通信方式(共享内存、信号灯集、消息队列)

共享内存 特点 1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。 2)为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程 将其映射到自己的私有地址空间。进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率。 3) 由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等 使

github源码指引:共享内存、数据结构与算法:树形结构ListTree

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。         专题:共享内存、数据结构与算法_初级代码游戏的博客-CSDN博客         本文讲解带有子项的链表。 一、介绍         与

C++共享内存交互方式

一、什么是共享内存 文件映射是一种实现进程间单向或双向通信的机制。它允许两个或多个本地进程间相互通信。为了共享文件或内存,所有的进程必须使用相同的文件映射的名字或是句柄。 说白了就是把内存当成磁盘,在内存上新建一个文件,其它进程只要知道这个文件的名字,就可以直接获取该内存文件上的数据。 二、实现步骤 为了实现共享文件,进程先调用OpenFileMapping方法,如果内存没有相应的文件可以使用::

共享内存的使用

一、共享内存的原理 共享内存是目前Linux进程间通信里面最高效、最简单的一种方式。它允许多个进程同时访问同一个内存,并不需要通过系统调用或者内核切换来完成,所以它的效率是所有IPC通信中最高的。在Linux开发中,共享内存常用于一个进程向另一个进程进行图像传输、结构体传输等。 共享内存的原理是它是从内核空间中申请一块内存区域,然后把这个区域的数据映射到不同的进程里面。然后多个进程

SQLite数据库中的.db-shm文件和.db-wal文件

.db-wal文件 wal意思是write-ahead log,顾名思义就是保存的一个日志,对于提交/回滚目的很有用。 sqlite 3.7之后开始提供这个功能,当一个数据库采用WAL模式,所有连接数据的操作都必须使用WAL,然后在数据库文件夹下生成一个后缀为.db-wal的文件保存操作日志。该日志使SQLite可以在事务失败时回滚更改。 SQLite如何使用它们以及为什么将它们保留这么长时间取

【Linux修行路】进程通信——共享内存

目录 ⛳️推荐 一、直接原理 1.1 共享内存的的申请 1.2 共享内存的释放 二、代码演示 2.1 shmget 2.1.1 详谈key——ftok 2.2 创建共享内存样例代码 2.3 获取共享内存——进一步封装 2.4 共享内存挂接——shmat 2.5 共享内存去关联——shmdt 2.6 释放共享内存——shmctl 2.7 开始通信 2.7.1 proc

IO进程day06(进程间通信、信号、共享内存)

目录 【1】进程间通信 IPC 1》 进程间通信方式 2》 无名管道 1> 特点 2> 函数接口 3> 注意事项 练习:父子进程实现通信,父进程循环从终端输入数据,子进程循环打印数据,当输入quit结束。 3》有名管道  1> 特点 2> 函数接口 3> 注意事项  练习:通过两个进程实现 cp功能  4> 有名管道和无名管道的区别 【2】信号  1》概念  2》信

windows下利用文件映射实现共享内存

windows下利用文件映射实现共享内存的办法比较简单,下面是实现代码,细节用注释说明. 调用类似linux下shm的操作.该类没有进行太多的测试,欢迎提出问题和bug~~:) #include <windows.h>#include <string>#include <iostream>#include <assert.h>using std::string;using std