liunx中共享内存

作者: 持之以蘅 | 来源:发表于2019-04-09 14:44 被阅读50次

实现步骤

创建共享内存区

进程1申请一块共享区域,通过shmget函数生成

映射共享内存到进程1

通过shmat实现

映射共享内存到进程2

通过进程1的shmat函数和同一个key值,执行shmat,将内存映射到进程2

进程1和进程2相互通信

进程自己协商处理

撤销内存映射关系

完成通信,需要撤销映射,使用shmdt函数实现

删除共享内存区

shmctl函数实现

主要函数

shmget

shmget

参数一:key为共享内存命名;
调用成功,发回与key相关的内存标识符(非负整数);调用失败返回-1;
参数二:size以字节为单位指定需要共享的内存容量;
参数三:shmflg为权限标志,共享内存的权限标志同文件的读写权限一样;

shmat

shmat

参数一:shm_id是shmget函数返回的共享内存标识;
参数二:shm_addr指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址;
参数三:shn_flg为一组标志位,通常为0;

shmdt

shmdt

作用:将共享内存从当前进程中分离,使该共享内存对当前进程不再可用;
其中shmaddr是shmat函数返回的地址指针,调用成功返回0,失败返回-1;

shmctl

shmctl

参数一:shmget函数返回共享内存标识符;
参数二:command可以取三个值
IPC_STAT:把shmid_ds结构中的数据设置为共享内存的当前关联值,即用共享内存的当前关联值覆盖shmid_ds的值;
IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值;
IPC_RMID:删除共享内存段;
参数三:buf是个结构指针,指向共享内存模式和访问权限的结构;

shmid_ds

shmid_ds

至少包括以上这些

相关文章

  • liunx中共享内存

    实现步骤 创建共享内存区 进程1申请一块共享区域,通过shmget函数生成 映射共享内存到进程1 通过shmat实...

  • 进程通信:共享内存,套接字

    进程通信方式:共享内存 共享内存本质上就是每个进程将虚拟地址空间指向共享内存块中,当一个进程往一个共享内存快中写入...

  • 共享内存数据库--设计及实现

    共享内存: 共享内存是三种IPC机制中的一种.共享享内存允许两个或多个进程进程共享同一块内存(这块内存会映射到各个...

  • 深信服一面C++

    首先自我介绍 Linux中创建共享内存的方式?共享内存中起始地址是不是按照页的大小对齐?创建共享内存的时候物理页一...

  • 深信服一面C++

    首先自我介绍 Linux中创建共享内存的方式?共享内存中起始地址是不是按照页的大小对齐?创建共享内存的时候物理页一...

  • boost 内存共享跨线程

    写一个模块用于跨进程内存共享,boost 很好的提供了在共享内存上的内存分配器,可以在共享内存中创建容器,然后跨进...

  • 共享内存的学习以及使用笔记

    什么是共享内存 在软件中,术语共享内存指可被多个进程存取的内存,一个进程是一段程序的单个运行实例。 共享内存有什么...

  • JVM

    JVM 内存模型 共享 实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用“共享变量”这个术语...

  • Java的并发

    Java的内存模型-JMM 线程A先将变量从共享内存保存到本地内存(可以是寄存器),修改后,再写入到共享内存中。这...

  • python多进程和多线程、内存共享和进程池、多线程编程

    @[toc] 内存共享 通过Value,Array实现内存共享返回一个从共享内存上创建的ctypes对象从共享内存...

网友评论

    本文标题:liunx中共享内存

    本文链接:https://www.haomeiwen.com/subject/yfmbiqtx.html