- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程通信 在进程之间进行信息交换,包括传递信号和数据。 Linux无名管道通信 若只触发某些行为,软中断信号机制简捷有效。 若进程间需交换数据? ---- 管道 管道:用“管道”将读写进程连接在一起,写进程将数据从写入端写入,读进程将数据从读出端读出。数据量大小是系统定义的最大缓冲区字节数。 创建和使用无名管道的系统调用 1. 创建管道 格式: int pipe( int fp[2] ); 返回:0 --- 正确返回,-1 ---- 错误返回 参数:fp[1]为写入端,fp[0]为读出端 功能:创建一个无名管道fp,fp[1]用于写,fp[0]用于读。 2. 读写管道----借助文件机制 格式:写管道 write( fp[1], buf, size ); 读管道 read( fp[0], buf, size ); 参数:buf为数据缓冲区;size为l读写长度。 头文件:unistd.h 管道通信示例1 main() { int p1, fd[2] ; char outpipe[50], inpipe[50]=“This is a message from child.”; pipe(fd); p1=fork(); if (p1==0) write(fd[1],inpipe,50); //写信息到管道 else if (p10); { wait(0); //等待子进程终止 read(fd[0],outpipe,50); //从管道读信息 printf(%s\n,outpipe); } } 管道通信示例2 main() { int p1, fd[2] ; char str1[50], str2[50]; pipe(fd); p1=fork(); 子进程执行的分支 父进程执行的分支 } 管道通信示例2执行结果分析 修改管道通信示例2 无名管道通信机制特点 管道中的数据是字符流,工作于单向通信方式; 管道逻辑上是由系统在内存中创建的临时文件实现的,物理上则由文件系统的高速缓冲区构成; 无名管道只能供创建管道的进程及其子孙进程共享; 管道为临界资源,各进程对管道的访问既有同步又有互斥,需要用户自己借助同步互斥机制以及文件机制来实现对管道的访问! Linux消息缓冲队列 1.创建或获取消息队列 格式:int msgget ( key_t key, int msgflag ); 功能:创建或获取标识为key的消息队列,并返回队列描述符。 返回:正确返回该消息队列的描述符msgid;错误返回-1。 参数: key—消息队列标识符,为正整数。可由用户指定(适用于不同进程家族);也可使用IPC_PRIVATE由系统产生key值(适用于同一进程家族); msgflag—标志或访问方式,由操作权限和控制命令进行或运算得到。 操作权限:用户可读0400 小组可读0040 其他可读0004 用户可写0200 小组可写0020 其他可写0002 控制命令:IPC_CREAT(值0001000),若队列不存在则创建。 2.对消息队列的控制 格式:int msgctl( int msgid, int cmd, struct msqid_ds *buf ); 功能:查询、设置消息队列的状态;撤消消息队列。 返回:函数调用成功返回0,不成功返回-1。 参数: msgid—该消息队列的描述符; cmd—规定命令的类型: IPC_STAT 查询消息队列状态,将消息队列的msqid_ds复制到buf; IPC_SET 设置或修改消息队列状态,设置有效用户、组标识、操作允许权、字节数; IPC_RMID 撤消描述符为msgid的消息队列; buf—含有控制参数或查询结果的用户缓冲区的地址,可为0。 3.发送消息 格式:int msgsnd( int msgid, struct msgbuf*msgp, int size, int flag); 功能:将msgp-msgbuf中的消息复制到msgid消息队列中,将之挂到队尾,唤醒等待消息的进程。 参数:msgid—执行msgget()返回的消息队列的描述符; msgp—待发送的消息; size—由msgp指向的数据结构中消息长度; flag—规定当消息队列满时应执行的动作,例如:若在fl
您可能关注的文档
- 机场集团呼叫中心解决方案重点.doc
- 第2章 软件生存期模型解析.ppt
- 第1章热化学与能源讲解.ppt
- 机场运行最低标准2015.9重点.ppt
- 第1章电子商务概论讲解.ppt
- 第2章 输入通道接口技术解析.ppt
- 机房工作计划重点.doc
- 机房承重加固标准介绍重点.doc
- 第1章电路的基本概念、定律讲解.ppt
- 第2章 速度继电器和温度继电器解析.ppt
- 文案济学章政策2009 worthch29.pdf
- big ben and westminster palacez1大本钟威斯敏斯特宫.pdf
- cisco unified computing system统一计算系health check form v3ucs健康检查表.pdf
- 基于bentley暖通专业技术应用研究修回稿.pdf
- 按电源键音量-进入fastboot模式选择bp tools电信破解教程nexus6.pdf
- 说明地址oad mt eden auckland accounting会计invoice to lmb.pdf
- 专题五 命运共同体-2022年中考道德与法治专题突破(时政素材+命题角度+拓展训练).docx
- 专题十 勇担社会责任 -备战2024年中考道德与法治真题题源解密(全国通用)(原卷版).docx
- 专题四 第三届中国国际消费品博览会-备战2024年中考道德与法治真题题源解密(全国通用)(解析版).docx
- 专题13 坚持宪法至上(讲与学)-备战2022年中考道德与法治一轮复习专题讲义及模拟.docx
文档评论(0)