Posix提供了两种在无亲缘关系进程间共享内存区的方法:

(1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。

(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。

者两种方法多需要调用mmap,差别在于作为mmap的参数之一的描述符的获取手段。

Posix共享内存区涉及以下两个步骤要求:

(1)指定一个名字参数调用shm_open,以创建一个新的共享内存区对象或打开一个已经存在的共享内存区对象。

(2)调用mmap把这个共享内存区映射到调用进程的地址空间。

注意:mmap用于把一个内存区对象映射到调用进程地址空间的是该对象的一个已经打开描述符。

1、shm_open

#include ​

int shm_open(const char *name, int oflag, mode_t mode);

​1)name    共享内存区的名字

2)oflag    标志位

3)mode    权限位,它指定O_CREAT标志的前提下使用。

​2、shm_unlink

int shm_unlink(const char *name); ​

删除一个共享对象的名字

3、ftruncate​

int ftruncate(int fd, off_t length);

将参数fd指定的文件大小改为参数length指定的大小

普通文件或共享内存区对象的大小都可以通过调用ftruncate修改

​4、fstat

int fstat(int fd, struct stat *buf);

查看状态

当打开一个已存在的共享内存区对象时,我们可调用fstat来获取有关该对象的信息

对于普通文件stat结构可以获得12个以上的成员信息,然而当fd指代一个共享内存区对象时,只有四个成员含有信息。

struct stat

{

mode_t st_mode;

uid_t st_uid;

gid_t st_gid;

off_t st_size;

};

转载于:https://www.cnblogs.com/luiz/p/6828811.html

Posix共享内存区相关推荐

  1. linux进程间通信之Posix共享内存用法详解及代码举例

    Posix共享内存有两种非亲缘进程间的共享内存方法: 1).  使用内存映射文件,由open函数打开,再由mmap函数把返回的文件描述符映射到当前进程空间中的一个文件. 2). 使用共享内存区对象,由 ...

  2. mmap内存映射、system V共享内存和Posix共享内存

    linux内核支持多种共享内存方式,如mmap内存映射,Posix共享内存,以system V共享内存.当内核空间和用户空间存在大量数据交互时,共享内存映射就成了这种情况下的不二选择.它能够最大限度的 ...

  3. Linux IPC实践(10) --Posix共享内存

    1. 创建/获取一个共享内存 #include <sys/mman.h> #include <sys/stat.h> /* For mode constants */ #inc ...

  4. linux进程间通信:POSIX 共享内存

    文章目录 思维导图 通信原理 优势 POSIX 共享内存 编程接口 编程案例 思维导图 之前学习过sysemV 的共享内存的实现及使用原理,参考linux进程间通信:system V 共享内存 POS ...

  5. Linux进程间通信六 Posix 共享内存简介与示例

    1. 共享内存简介 共享内存主要用于不同进程之间相互通信,因为操作的是同一块地址,不需要内核和用户层之间数据拷贝,属于最快的进程间通信方式,不过,为了防止读写冲突,一般需要额外的同步手段.之前介绍了S ...

  6. Linux_UNIX编程手册-读书笔记-第五十四章(POSIX共享内存)

    54.1 概述 POSIX共享内存能够让无关程序共享一个映射区域而无需创建一个相应的映射文件. linux使用挂载与/dev/shm目录下的专用tmpfs文件系统,系统上POSIX共享内存区域占据的内 ...

  7. Linux IPC POSIX 共享内存

    模型 #include <unistd.h> //for fstat() #include <sys/types.h> //for fstat() #include <s ...

  8. 【Linux 应用编程】进程管理 - 进程间通信IPC之共享内存 mmap

    IPC(InterProcess Communication,进程间通信)是进程中的重要概念.Linux 进程之间常用的通信方式有: 文件:简单,低效,需要代码控制同步 管道:使用简单,默认阻塞 匿名 ...

  9. [IPC] 共享内存——分析和使用

    共享内存 共享内存简介 共享内存是所有进程间通信(IPC)手段中速度最快的,不同进程间使用事实上的同一内存区域,这样使得进程间使用信息时免去"复制"这一流程,减少开销. 以下面&q ...

最新文章

  1. Docker学习(1)——几张图快速了解Docker
  2. 软件项目管理 用户测试,1对软件研发过程中用户需求研发设计项目测试交付实施测试等流程监督管理.doc...
  3. python关闭读写的所有的文件-python文件读写操作
  4. 三年了总觉的还是该写点什么
  5. Opencv FFmpeg Ubuntu下编译问题
  6. 增强中获取屏幕值的一句很实用代码…
  7. js获取form表单数据和form表单赋值
  8. 用MaskNetwork代币MASK首轮公开销售已结束,今晚23:00将进行第二轮售卖
  9. matlab 轴gui,MatlabüGUI学习笔记(4)——公共对象属性的轴,MatlabGUI,四,常用,之,Axes...
  10. Linux 命令(40)—— nohup 命令
  11. 伪响应式开发(PC和Mobile分离)
  12. 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...
  13. PKUSC2019划水记
  14. vue地址栏输入路由跳转到首页_vue 路由跳转四种方式 (带参数)
  15. 【Scratch-声音模块】音调音效设置
  16. 使用wps将excel中的行转列(转置)
  17. shell 参数的分组读取
  18. 恒指期货交易5分钟技巧
  19. 数据集下载OTB,VOT,UAV,鸢尾花
  20. 西恩科技更新招股书:IPO前大手笔分红“套现”, 赵志安为实控人

热门文章

  1. Spring Cloud Alibaba —— Sentinel 详细使用
  2. Java基础————理解Integer对象的缓存策略
  3. Java排序算法之--快速算法--快速上手
  4. idea数据库反向生成实体类_asp.net core 系列 21 EF现有数据库进行反向工程
  5. 永洪报表工具_2020年最值得推荐的五大BI工具
  6. Java final修饰符的作用,Java中的final修饰符
  7. python安卓开发实例_python服务器与android客户端socket通信实例
  8. python补充urllib教程,Python爬虫之urllib基础用法教程
  9. jsp源码oracle数据库,JSP与oracle数据库交互案例
  10. asr语音转写_搜狗智能录音笔C1正式上市 语音转文字准确率达95%