首页
学习
活动
专区
圈层
工具
发布

【Linux】进程间通信——System V共享内存

前言   System V是一种在Linux系统中用于进程间通信(IPC)的机制。它提供了几种不同的通信方式,包括共享内存、消息队列和信号量。...以下是关于Linux进程间通信System V共享内存的详细解释: 1. 基本原理   System V共享内存是IPC(进程间通信)机制的一部分,它允许两个或多个进程共享一段物理内存。...参数shmflg我们主要学习两种:IPC_CREAT和IPC_EXCL。...IPC_CREAT和IPC_EXCL都是宏,IPC_CREAT表示如果通过key值标识的共享内存不存在就创建;存在就获取该共享内存并返回它。...IPC_EXCL单独使用无意义,通常是和IPC_CREAT搭配使用,IPC_CREAT|IPC_EXCL,使用逻辑运算符或连接:表示如果通过key值标识的共享内存不存在就创建;存在就出错返回。

55010

初识Linux · 共享内存

我们通过这个图,引出我们今日的话题: 在Linux中,万物皆是文件的概念已经深深的刻入到了我们的大脑里面,在文件系统里面我们介绍了进程,介绍了地址空间,介绍了页表,介绍了物理内存之间的映射关系,知道了代码和数据的地址通过页表...在Linux源码里面是有共享内存对应的结构体的,这里因为不介绍,所以不放出对应的源码了,肯定就有人说了,怎么又又又是结构体?...因为Linux就是C语言写的呀,并且,C语言想要对某个对象管理,结构体不是最好的选择吗? 所以我们得出一个结论,共享内存 = 共享内存的数据 + 共享内存的属性!!...size代表的是开辟的共享内存的大小,对于shmflg,也就是共享内存的标志,我们这里就介绍两个常用的,一个是IPC_CREAT 一个是IPC_EXCL,使用时候我们可以分为IPC_CREAT使用,IPC_EXCL...单独使用没有意义,IPC_CREAT | IPC_EXCL使用。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux进程间通信】深入探索:Linux下的命名管道与System V共享内存

    前言:在Linux操作系统中,进程间通信(IPC)是一个至关重要的概念,它允许不同的进程之间进行数据交换和同步。随着现代操作系统的日益复杂,进程间通信的重要性也日益凸显。...这种机制在需要高效数据交换的场景中特别有用,例如数据库系统、实时系统等 本文旨在深入探讨Linux进程间通信中的命名管道和System V共享内存。...通过本文的学习,你将能够深入理解Linux进程间通信的核心概念,并掌握命名管道和System V共享内存的使用方法 1....) IPC_CREAT | IPC_EXCL:当这两个标志位一起使用时,系统调用将尝试创建一个新的IPC对象。...总结 随着我们对Linux进程间通信中命名管道和System V共享内存的深入学习,不难发现,这两种机制在操作系统中扮演着举足轻重的角色。

    47210

    【Linux】进程间通信(命名管道、共享内存、消息队列、信号量)

    今日更新了Linux进程间通信的内容 欢迎大家关注点赞收藏⭐️留言 命名管道 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。...这个共享内存段名字(由用户形成) size:共享内存大小 shmflg:由九个权限标志构成,它们的用法和创建文件时使用的mode模式标志是一样的 常见标志位组合和使用: IPC_CREAT 、IPC_EXCL...IPC_EXCL:单独使用没意义,只有和IPC_CREAT组合才有意义 IPC_CREAT | IPC_EXCL:如果你要创建的共享内存不存在,就创建。如果存在,就出错返回。...if (_who == gCreater) { _shmid = GetShmHelper(_key, gShmSize, IPC_CREAT | IPC_EXCL...信号量的操作 Linux中允许用户一次申请多个信号量,用信号量集保存,信号量集用数组来维护。 如果申请了多个信号量,上面的nsems就是申请的信号量的个数。

    54910

    System V通信

    key, size_t size, int shmflg); //最后一个参数是标志位,可以传0(相当于IPC_CREAT) //IPC_CREAT:如果不存在就创建,存在就获取 //IPC_CREAT|IPC_EXCL...:不存在就创建,存在就获取(IPC_EXCL不能单独使用) 挂接和去关联(shmat和shmdt) #include #include void *shmat...void*attachShm(int shmid) { void*start = shmat(shmid,nullptr,0); if((long long)start==-1L)//linux...给客户端使用,所有有关共享内存的维护工作都由服务端来进行 key_t key=getkey(); //cout<<key<<endl; //int flags=IPC_CREAT|IPC_EXCL...共享内存的优缺点 优点: 共享内存是最快的通信方式,因为拷贝次数相比其他的通信方式要更少 缺点 共享内存作为最快的通信方式,但是使用的却很少,这主要是因为: 1.它的下标与文件系统完全不兼容,而Linux

    32630

    【Linux】system V 共享内存

    查看 申请一个 系统V的共享内存块 如果创建成功,则会返回共享内存标识符,失败返回-1 ---- size代表申请内存块的大小 shmflg代表 选项 有两个最常用的选项,IPC_CREAT IPC_EXCL...转到定义就可以发现其实这两个都是宏 ---- 若单独使用 IPC_CREAT :创建一个共享内存,如果共享内存不存在,就创建之,如果已经存在,就获取已经存在的共享内存并返回 IPC_EXCL不能单独使用...,一般都要配合 IPC_CREAT 若要将两个选项同时传进去 IPC_CREAT | IPC_EXCL 两个选项同时用: 创建一个共享内存,如果共享内存不存在,就创建之,如果已经存在...key_t k,int size)//创建共享内存 { //带有两个选项 若不存在则创建,若存在则报错 return createshmhelper(k,size,IPC_CREAT |IPC_EXCL

    1.2K20
    领券