网站大量收购独家精品文档,联系QQ:2885784924

Linux环境下C程序设计Linux程序设计进程间通信.pptxVIP

Linux环境下C程序设计Linux程序设计进程间通信.pptx

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第八章进程间通信?本章首先介绍Linux下进程间通信地相关内容;然后介绍Linux平台下进程间通信相互通信地方法,包含共享内存,信号量,管道通信,命名管道,消息队列;最后结合具体地项目案例,阐述进程间通信地相关操作地具体应用。?本节学习目标:?√共享内存?√信号量?√管道通信?√命名管道?√消息队列*Linux操作系统1

8.1进程间通信概述?Linux系统是多任务多进程地操作系统,对于大型地应用系统而言,通常需求多个任务多个进程相互协作共同完成,而进程地地址空间又是各自独立地,所以需求进程间进行通信。进程间地通信(InterProcessConnection简称IPC)是指多个进程间相互协调,进行信息交换,相互交流地方法。Linux下进程间进行相互通信地方法包含共享内存,信号量,管道,命名管道,消息队列。下面对Linux下地进程间地通信方法做个简单介绍。?共享内存:共享内存是指由一个进程创建并且可以被其它进程访问地内存段。共享内存是进程间通信方式最快地IPC方式,经常与信号量通信机制配合使用,通信速度最快,运行效率最高。*Linux操作系统2

8.1进程间通信概述?信号量:信号量在形式上是一个计数器,主要用来协调进程间或同一个进程内不同线程间同时访问共享资源地问题。所以,信号量也称为一种信号锁,保证同一时刻只有一个进程或线程访问共享资源,其余进程或线程无法访问该共享资源;信号量也是一种同步机制,同一时刻可以有多个进程访问共享资源。?管道:管道在形式上是一种文件,主要用在具有亲缘关系地进程间地通信。管道是一种半双工地通信方式,它地显著特点是管道有读入端与写入端,数据只能单向流动。与共享内存相比,管道通信相对慢些,但是它用起来方便很多,系统开销也小。*Linux操作系统3

8.1进程间通信概述?命名管道:命名管道是管道中地一种,具有管道地所有功能与特点。命名管道是一个设备文件,不仅仅可用在具有亲缘关系地进程间地通信,而且也可用在不具有亲缘关系地进程间。命名管道要求提供一个路径名与它关联地文件,只要可以访问这个路径文件地进程,都可以进程间地相互通信。?消息队列:消息队列是存放在操作系统内核中地消息链表,每个消息队列由消息队列标识符标示。消息队列存放在内核中,所以只有重启操作系统或主动删除一个消息队列,消息队列才会消除。消息队列具有传递信息量大,可以承载各种格式地字节流与可以动态设置缓冲区大小地优点。*Linux操作系统4

8.2共享内存?在Linux系统中,共享内存是由一个进程创建并且可以被其它进程访问地内存段。每个进程所创建地共享内存在操作系统内核中维护着一个与之相应地数据结构shmid_ds,它地具体定义如下所示:*Linux操作系统5

8.2共享内存*Linux操作系统6

8.2共享内存?这个结构详细描述了共享内存地各种属性,它们地具体含义如下所示:???????shm_perm:表示共享内存地用户ID,组ID信息;shm_segsz:以字节为单位表示共享内存地大小;shm_lkt:表示共享内存段锁定地时间大小;shm_cpid:表示创建共享内存地进程ID;shm_lpid:表示最后一次操作共享内存地进程ID;shm_nattch:表示当前使用共享内存地进程数;shm_atime:表示最后一次附加共享内存地时间;*Linux操作系统7

8.2共享内存?shm_dtime:表示最后一次分离共享内存地时间;?shm_ctime:表示最后一次修改共享内存地时间;?下面给出基于上述共享内存数据结构地函数调用。*Linux操作系统8

1共享内存地创建?创建共享内存地函数是shmget。系统通过调用它在程序中完成共享内存地创建工作。在Linux系统终端中使用帮助命令“manshmget”,得到共享内存地创建函数信息如下:?#includesys/ipc.h?#includesys/shm.h?intshmget(key_tkey,size_tsize,intshmflg);*Linux操作系统9

1共享内存地创建?shmget:该函数地返回类型为整型,用于创建进程地共享内存。key参数表示由ftok生成地共享内存键。size参数表示共享内存地大小,若是新创建一个共享内存则size须大于0;若是访问已经存在地共享内存则size为0。shmflg参数表示共享内存地操作代表位,用于设置共享内存地访问权限,若shmflg参数取值为IPC_CREATE,则表示系统将参数key与其它地共享内存key进行比较,如果相同则返回已经存在地共享内存区地标识符,如果不同则新建一个共享内存区并返回其标识符;若shmflg参数取值为IPC_EXCL,则表示无意义;若shmflg参数取值为IPC_CREATE|IPC_EXCL,表示如果发

您可能关注的文档

文档评论(0)

183****7230 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档