前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 进程通信-共享内存(shared memory)《Rice linux 学习开发》

linux 进程通信-共享内存(shared memory)《Rice linux 学习开发》

作者头像
Rice加饭
发布2022-05-09 21:21:37
9910
发布2022-05-09 21:21:37
举报
文章被收录于专栏:Rice嵌入式Rice嵌入式

Shared memory概述

共享内存:是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。

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

共享内存的特点

共享内存和其他进程通信方式对比图,进程直接读取内存区。

共享内存的实现步骤

  • 创建/打开共享内存
  • 映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
  • 撤销共享内存映射
  • 删除共享内存对象

共享内存相关函数

shmget()函数:创建共享内存

其中,key_y:是由函数ftok()返回。

  • ftok()函数原型:key_t ftok(char *fname, int id)
    • fname:指定的文件名(该文件必须存在而且可以访问)
    • id:子序号,虽然为int,但是只有8个比特被使用(0-255)
    • 当成功执行的时候,一个key_t值将会被返回,否则-1被返回

shmat()函数:内存映射,并获的映射地址

shmdt()函数:断开共享内存连接

shmctl()函数:共享内存管理

例程

共享内存例程请参考github的shared-memory目录下write.c和read.c。

在这个例程中同时应用了信号的知识,顺便稳固了之前学到的知识一举两得。github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 共享内存:是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。
  • 共享内存的特点
    • 共享内存和其他进程通信方式对比图,进程直接读取内存区。
    • 共享内存的实现步骤
    • 共享内存相关函数
      • shmget()函数:创建共享内存
        • 其中,key_y:是由函数ftok()返回。
          • shmat()函数:内存映射,并获的映射地址
            • shmdt()函数:断开共享内存连接
              • shmctl()函数:共享内存管理
              • 例程
                • 共享内存例程请参考github的shared-memory目录下write.c和read.c。
                  • 在这个例程中同时应用了信号的知识,顺便稳固了之前学到的知识一举两得。github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档