因为工作需要,这几天研究了一下共享内存。搞得自己也有点糊涂。糊涂在哪里?有两个共享内存的东西。仔细研究了之后,初步结论如下。

  • shm_open

  把共享内存以文件方式打开,这样就可以直接向文件中写入数据了。有以下注意事项:

  1. 从了解的资料来看,硬盘可能有对应的文件。如果是真的,数据量大的时候,就存在一个性能问题。
  2. 进程甲写数据,进程乙可能分两次收到。
  3. 一个进程写,另外两个进程是否都能收到?
  4. 如果使用select(),理论上不需要加锁。

  有人问,用管道是不是能实现同样功能?如果是一对一,管道可以;如果是多对一,还是这个更好。因为工作情况,没有更深入的研究。

  • shmget

  就是得到一个内存区, KEY相同情况下,各进程访问的是同一块内存。造型为指定类型后,直接操作访问。注意:

  1. 访问进程间要加锁。这个锁也必须是共享内存锁。参考吾其他博文。
  2. 写数据时,结构体中的缓冲区必须是已经声明足够大小,而不是一个指针需要时malloc。因为malloc的地址,其他进程访问不到。

同是共享内存,shm_open与shmget有什么差异?相关推荐

  1. 李治军老师操作系统实验6----地址映射与共享-共享内存函数(shmget、shmat、shmctl)

    本文参考https://blog.csdn.net/laoshuyudaohou/article/details/103843023 一.实验目标 深入理解操作系统的段.页式内存管理,深入理解段表.页 ...

  2. Linux进程间通信:共享内存函数(shmget、shmat、shmdt、shmctl)及其范例

    共享内存函数由shmget.shmat.shmdt.shmctl四个函数组成.下面的表格列出了这四个函数的函数原型及其具体说明. 1.   shmget函数原型 shmget(得到一个共享内存标识符或 ...

  3. C语言之共享内存shm_open(二十五)

       在多个进程之间交换数据,在多个进程之间交换数据,最高效的方法莫过于共享内存.    linux共享内存是通过tmpfs这个文件系统来实现的,tmpfs文件系的目录为/dev/shm,/dev/s ...

  4. 共享内存函数(shmget、shmat、shmdt、shmctl)

    一:shmget函数:得到一个共享内存标识符或创建一个共享内存对象 1,头文件: #include <sys/ipc.h>#include <sys/shm.h> 2,函数说明 ...

  5. C语言之共享内存之shmget进程间通信(二十三)

    一. shm_open()和shmget()区别 1.shm_open主要打开一个共享内存用户进程间交换大量数据. 用法: 把共享内存以文件方式打开,这样就可以直接向文件中写入数据. 2.shmget ...

  6. shmget() -- 建立共享内存[zz] - [LINUX]

    版本声明:此文章来源于http://leezen.blogbus.com/logs/19564086.html,如果还想转载请看他的版本声明 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及 ...

  7. shmget - 共享内存

    一. 共享内存介绍 系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的 进程都必须在本进程的地址空间新增一块内存区域,用来映射 ...

  8. 共享内存(shmget,shmat,shmdt,shmctl)

    共享内存shmgetshmatshmdtshmctl shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存 ...

  9. Linux进程间通信源码剖析,共享内存(shmget函数详解)

    转至:http://blog.csdn.net/lanmanck/article/details/6092995 shmget int shmget(key_t key, size_t size, i ...

  10. 共享内存 shmget函数

    内核共享内存 shmget 头文件 函数 #include <sys/ipc.h> #include <sys/shm.h>// 得到一个共享内存标识符或创建一个共享内存对象并 ...

最新文章

  1. 2017-2018-1 20155226《信息安全系统设计基础》第2周学习总结
  2. 千家BBS系列-技术宝典(免费下载软件)
  3. 初学__Python——Python代码的组织形式
  4. Keras .ImageDataGenerator图像增强用法大全以及如何和模型结合起来(有代码)
  5. 多层架构模型中的BLL 与 Model的解释
  6. 【转载】:单例设计模式
  7. java的字符定义_Java字符串定义及常用方法
  8. python中面向对象的缺点_面向对象中的多态在 Python 中是否没有什么意义?
  9. POJ NOI MATH-7653 地球人口承载力估计
  10. 计算机虚拟仪器技术与测试技术相关的概念,虚拟测试技术概念辨析.pdf
  11. Atitit 组织软资产建设 知识管理 经济学架构体系
  12. OpenCv特征匹配
  13. 常见查找算法--(快速查找或二分查找)
  14. 推荐系统三十六式:矩阵分解 总结
  15. 为什么Java编程语言用一种咖啡名做名字
  16. 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
  17. 9104年了,你还中毒?—— Synaptics.exe 中毒小记
  18. B4A 饺子播放器超简插件
  19. python星座分析
  20. 安卓rtmp推流app_视频直播app开发只需三步就可完成

热门文章

  1. centos6安装mysql并远程连接_Linux中Mysql不支持远程连接解决办法
  2. redis实现排行查询及排序及分页
  3. 白盒测试实践作业进度报告——Day 3
  4. std::remove_if
  5. 有没有这样一种程序员写代码的利器
  6. Mysql-5.6.x多实例配置
  7. Bearcat pomelo game 实战 -- treasures
  8. 搭建CentOS的本地yum源
  9. 讨厌的迅雷占用80口
  10. pandas读取csv文件数据并使用matplotlib画折线图和饼图