2022年武汉华嵌Linux进程间通信之共享内存分享 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年武汉华嵌Linux进程间通信之共享内存分享 .pdf》由会员分享,可在线阅读,更多相关《2022年武汉华嵌Linux进程间通信之共享内存分享 .pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux 进程间通信之共享内存作者:武汉华嵌嵌入式培训中心技术部共享内存区是可用 IPC 形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间, 这些进程间数据的传递就不再涉及内核(这里说的不涉及内核的含义是: 进程不再通过执行任何进入内核的系统调用来彼此传递数据)。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步,同步的方式有多种,比如:信号量、互斥锁等等。以下两图分别描述了读写消息时,一个要进入内核,而一个不进入内核的情况:对于 System V 共享内存区,内核维护如下的信息结构,它定义在头文件中:struct shmid_ds struct ipc_per
2、m shm_perm; /* operation permission struct */ size_t shm_segsz; /* segment size */ . . . ; 有了以上的知识, 那么如何来对共享内存进行操作呢,以下就开始讲解如何来操作:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 创建一个新的共享内存区,或者访问一个已存在的共享内存区。#include int shmget(key_t key, size
3、_t size, into flag);size 以字节为单位指定内存区的大小。当实际操作为创建一个新的共享内存区时,必须指定一个不为0 的 size 值。如果实际操作为访问一个已存在的共享内存区,那么 size 应为 0。oflag 为读写权限值的组合。它还可以与IPC_CREAT 或 IPC_CREAT|IPC_EXCL按位或。当实际操作为创建一个共享内存区时,该内存区被初始化为size 字节的 0。由 shmget 创建或打开一个共享内存区后,通过调用shmat 把它附接到调用进程的地址空间。#include void *shmat(int shmid, const void *shma
4、ddr, int flag);shmid 是由 shmget返回的标识符。 Shmat的返回值是所指定的共享内存区在调用进程内的起始地址。确定这个地址的规则如下:如果 shmaddr是一个空指针, 那么系统替调用者选择地址。 (这个是推荐的方法)如果 shmaddr是一个非空指针,那么返回地址取决于调用者是否给flag参数指定了 SHM_RND: o如果没有指定 SHM_RND,那么相应的共享内存区附接到由shmaddr参数指定的地址;o如果指定了 SHM_RND,那么相应的共享内存区附接到由shmaddr参数指定的地址向下舍入一个SHMLBA 常值。当一个进程完成共享内存区的使用时,它可调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年武汉华嵌Linux进程间通信之共享内存分享 2022 武汉 Linux 进程 通信 共享 内存 分享
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内