欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年武汉华嵌Linux进程间通信之共享内存分享 .pdf

    • 资源ID:27202838       资源大小:49.24KB        全文页数:5页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年武汉华嵌Linux进程间通信之共享内存分享 .pdf

    Linux 进程间通信之共享内存作者:武汉华嵌嵌入式培训中心技术部共享内存区是可用 IPC 形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间, 这些进程间数据的传递就不再涉及内核(这里说的不涉及内核的含义是: 进程不再通过执行任何进入内核的系统调用来彼此传递数据)。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步,同步的方式有多种,比如:信号量、互斥锁等等。以下两图分别描述了读写消息时,一个要进入内核,而一个不进入内核的情况:对于 System V 共享内存区,内核维护如下的信息结构,它定义在头文件中:struct shmid_ds struct ipc_perm shm_perm; /* operation permission struct */ size_t shm_segsz; /* segment size */ . . . ; 有了以上的知识, 那么如何来对共享内存进行操作呢,以下就开始讲解如何来操作:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 创建一个新的共享内存区,或者访问一个已存在的共享内存区。#include int shmget(key_t key, size_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 *shmaddr, int flag);shmid 是由 shmget返回的标识符。 Shmat的返回值是所指定的共享内存区在调用进程内的起始地址。确定这个地址的规则如下:如果 shmaddr是一个空指针, 那么系统替调用者选择地址。 (这个是推荐的方法)如果 shmaddr是一个非空指针,那么返回地址取决于调用者是否给flag参数指定了 SHM_RND: o如果没有指定 SHM_RND,那么相应的共享内存区附接到由shmaddr参数指定的地址;o如果指定了 SHM_RND,那么相应的共享内存区附接到由shmaddr参数指定的地址向下舍入一个SHMLBA 常值。当一个进程完成共享内存区的使用时,它可调用shmdt 断接这个内存区。#include int shmdt(const void *shmaddr);当一个进程终止时,它当前附接着的所有共享内存区都自动断接掉。注意:本函数调用并不删除所指定的共享内存区。shmctl 提供了对一个共享内存区的多种操作。#icnldue 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - int shmctl(int shmid, int cmd, struct shmid_ds *buff);该函数提供了三个命令:IPC_RMID 从系统中删除由 shmid 标识的共享内存区并拆除它。IPC_SET 给所描写的共享内存区设置其shmid_ds 结构的某些成员。IPC_STAT 向调用者返回所指定共享内存区当前的shmid_ds 结构。以下是共享内存结合信号量进行操作的部份代码:发关进程的部份代码:/ 创建一个共享内存区if(shmid1 = shmget(shmkey1, MAX_SHEARE_MEM_SIZE, IPC_CREAT|0666) 0) perror(shmget); / 把共享内存区附接到调用进程的地址空间if(sharmem = shmat(shmid1, NULL, 0) 0) perror(shmat); while(1) sem_p(semid1); /semid1进行 p 操作,保护共享区名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - memset(buff, 0, MAX_SHEARE_MEM_SIZE); printf(Input ou want to say with you friend!n); fgets(buff, MAX_SHEARE_MEM_SIZE, stdin); if(strncmp(buff, quit, 4) /往共享内存区放入数据 strncpy(sharmem, buff, MAX_SHEARE_MEM_SIZE); sem_v(semid2); /semid2进行 v 操作,释放对共享区的保护 else strncpy(sharmem, buff, MAX_SHEARE_MEM_SIZE); sem_v(semid2); break; 接收进程部份代码:while(1) sem_p(semid2); /semid2进行 p操作,保护共享区 memset(buff, 0, MAX_SHEARE_MEM_SIZE); strncpy(buff, sharmem, MAX_SHEARE_MEM_SIZE); /从共享内存区取出数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - printf(receive from you friend : %sn, buff); if(!strncmp(buff, quit, 4) del_sem(semid1); del_sem(semid2); break; sem_v(semid1); /semid1进行 v 操作,释放对共享区的保护 / 删除共享内存区if(shmctl(shmid1, IPC_RMID, NULL) 0) perror(shmctl); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

    注意事项

    本文(2022年武汉华嵌Linux进程间通信之共享内存分享 .pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开