- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux进程间通信(下) Linux IPC programme 课程目标 System V IPC 接口简介 System V 消息队列 System V 信号量 System V 共享内存 POSIX IPC接口 Posix 消息队列 Posix 信号量 Posix 共享内存 System V IPC 接口 由于历史原因, linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的 . Unix发展做出重大贡献的两大主力ATT的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同 贝尔实验室对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内 . BSD则形成了基于套接口(socket)的进程间通信机制 ,可以在跨机器进行通信. 由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(POSIX)。 他也发展出一套新的IPC接口.Linux 本身支持POSIX接口.因此也支持POSIX的IPC接口 最初Unix IPC包括:管道、FIFO、信号 , System V IPC包括:System V消息队列、System V信号灯、System V共享内存区 , Posix IPC包括: Posix消息队列、Posix信号灯、Posix共享内存区。 System V IPC通常在多个操作系统均实现,包括一般的嵌入式Linux系统,因此本课程主要介绍system V IPC Linux 的IPC SystemV IPC指以下三种类型的IPC: SystemV消息队列 sys/msg.h SystemV信号灯 sys/sem.h SystemV共享内存区 sys/shm.h 创建或打开函数 msgget,semget,shmget 控制操作函数 msgctl,semctl,shmctl 操作函数 msgsnd,msgrcv,semop,shmat,shmdt System V关键字 每一个System V 对象(消息队列,共享内存和信号量)创建时,需要的第一个参数是整数的Key值, 头文件sys/types.h把key_t定义为一个整数 System V 创建对象时假设进行IPC通讯双方都取了相同的key值.这样将双方关联起来 生成key的方法有三种 双方直接设置为一个相同的整数为key值 用IPC_PRIVA让系统自动产生一个key值, 用ftok函数将一个路径转换为key值 ftok函数 ftok函数把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键(IPC key): #include sys/ipc.h key_t ftok(const char *pahtname, int id); 如果pathname不存在,或者对调用进程不可访问,ftok返回-1 不能保证两个不同的路径名与同一个id值的组合产生不同的键。 用于产生键的pahtname不能是服务器存活期间由它反复创建并删除的文件,否则会导致ftok多次调用返回不同的值 System V IPC的类型 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。 消息队列 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。 消息队列能够克服早期unix通信机制的一些缺点 ,如数据量小,没有实时性 消息队列(2) 消息队列消息通常要以一个long mtype放在消息开始, mtype成员代表消息类型,从消息队列中读取消息的一个重要依据就是消息的类型 struct msgbuf{ long mtype; char mtext[1]; }; 消息队列与管道以及有名管道相比,具有更大的灵活性 它提供有格式字节流,有利于减少开发人员的工作量 消息具有类型,在实际应用中,可作为优先级使用。这两点是管道
文档评论(0)