第8章进程通信.pptVIP

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

default: /*在父进程中*/ close(f_des[0]); if(write(f_des[1],argv[1],strlen(argv[1])) !=-1{ printf(“Message sent by parent :[%s]\n”,argv[1]); fflush(stdout); } else{ perror(“write”); exit(5); } } exit(0); } 程序运行: % a.out message is abcde Message send by parent: [message is abcde] Message received by child:[message is abcde] 3. 有名管道 有名管道生成时在文件系统中生成一个目录表项,因此有文件访问权限,并允许其它进程对该管道进行访问。 普通用户可以用mknod命令生成一个有名管道文件,命令的使用方式为: % mknod PFILE p 第一个参数是有名管道文件的文件名; 第二个参数p告诉mknod命令生成一个FIFO的管道文件。 用ls命令查阅新创建的文件列表: % ls –l PFILE ↙ prw -r- - r- - l gray other 0 mar 10 15:36 PFILE 使用此管道文件: % cat cfile.c PFILE % cat PFILE 一. 概念 IPC(Inter process Commuaction)进程间通信是运行在多任务操作系统中或联网计算机上的程序和进程使用的一组技术,包括内容很广。 IPC可分为两种类型: 1)本地过程调用(LPC),它们允许并发运行的任务能彼此对话。LPC能共享内存空间、同步任务并相互发送消息,前面描述的管道及信号通信属于其中。 2)远程过程调用(RPC) RPC类似于LPC,但却工作在网络上。RPC首先出现在运行UNIX操作系统的SUN微系统公司和HP公司的计算机上。 8.4 IPC 通信 ATT贝尔实验室侧重于: 对UNIX早期的进程通信手段进行改进和扩充形成“system V IPC”,进程通信局限于单计算机系统内。 BSD侧重于: 跳出单机限制,形成基于socket的进程通信机制,但经过端口的重定义也可完成单机进程通信。 二. Linux IPC通信机制 其中UNIX最初的IPC包括: 无名管道、FIFO(有名管道)、信号 System V IPC 包括: System V的消息队列、System V的信号灯、System V的共享内存区 Posix IPC包括: IPC消息队列、IPC的信号灯、IPC的共享内存区 BSD IPC包括: 套接字函数socket( )、socktpair( )、bind( )、connect( ) 等 三.System V的IPC通信 ? 消息(message)--进程间分类格式化数据传送; ? 共享存储区方式(shared memory)—多个进程共享一段虚拟存储空间; 信号量机制(semaphore)--多个进程在一组信号量上同步。 UNIX系统中用以下命令可得到当前系统中IPC的所有信息: % ipcs –b 用以下命令删除IPC机制: % ipcrm –q 50 此处主要介绍消息通信方式. 1. 消息(message)机制的数据结构 消息队列的首部信息放在消息队列头表中 消息队列中的信息由消息头表构成 消息头表与某个数据区的正文相关联 2. 消息机制提供的系统调用 · msgsnd:发送消息 msgsnd(msgqid,msgp,msgsz,msgflg) int msgqid; /*消息描述符*/ struct msgbuf *msgp; /消息类型和字符数组的指针*/ int msgsz,msgflg;/*msgsz是数组大小,msgflg是步标志*/ · msgget:返回消息描述符,用于指定一消息队列 msgqid=msgget(key,msgflg) key_t key; /*get的关键字*/ int msgflg; /*get的标志*/ · msgrcv:接受消息 msgrcv(msgqid,msgp,msgsz,msgtyp,msgflg) int msgqid; struct msgbug *msgp; int msgsz; log msgty

文档评论(0)

wuailuo + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档