- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 Linux进程通信
Linux管道通信 若传递信息少或触发某些行为,软中断信号机制简捷有效。 信息量较大或进程间存在交换数据的要求 ---- 管道 管道:将将一个写进程和一个读进程用“管道”连接在一起,写进程将数据从写入端写入,读进程将数据从读出端读出。数据量大小是系统定义的最大缓冲区字节数。 无名管道的实现方法 管道中的数据格式是字符流,工作于单向通信方式。逻辑上是由OS在内存中创建的临时文件实现的,物理上则由文件系统的高速缓冲区构成。 管道类型:有名管道和无名管道 无名管道只能供创建管道的进程及其子孙进程共享。 创建和使用无名管道的系统调用 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为读写长度。 头文件:#includeunistd.h 创建和使用无名管道的系统调用 lockf(fd, mode, len) 是一个用于进程互斥的实用例程,其功能是将文件fd的指定区域进行加锁和解锁,以解决临界资源的竞争问题。 fd 是打开文件的文件描述符,由此函数调用建立锁定。 len 是要锁定或解锁的连续字节数。 创建和使用无名管道的系统调用 lockf(fd, mode, len) mode是指定要采取的操作的控制值,如下所示: # define F_ULOCK 0 //解锁 # define F_LOCK 1 //互斥锁定区域 # define F_TLOCK 2 //测试互斥锁定区域 创建和使用无名管道的系统调用 # define F_TEST 3 //测试区域 F_TEST 用于检测在指定的区域中是否存在其他进程的锁定。如果该区域可访问,lockf()将返回0,否则返回?1;F_LOCK 和 F_TLOCK 都用于锁定文件的某个区域(如果该区域可用)。F_ULOCK 用于删除文件区域的锁定。 Linux消息机制 消息通信系统调用: int msgget(key_t key, int msgflg); int msgctl(int msqid,int cmd,struct msqid_ds *buf); int msgsnd(int msqid,struct msgbuf *msgp,size_t msgsz,int msgflg); sszie_t msgrcv(int msqid,struct msgbuf *msgp,size_t msgsz,long msg_typ,int msgflg); 头文件:sys/types.h, sys/ipc.h,sys/msg.h 创建消息队列 格式:int msgget ( key_t key, int msgflag ); 功能:创建或获取标识为key的消息队列,并返回队列描述符。 返回:正确返回该消息队列的描述符msgid;错误返回-1。 参数: key—消息队列标识符,为正整数。可由用户指定(适用于不同进程家族);也可使用IPC_PRIVATE由系统产生key值(适用于同一进程家族); msgflag—标志或访问方式,由操作权限和控制命令进行或运算得到。 操作权限:用户可读0400 小组可读0040 其他可读0004 用户可写0200 小组可写0020 其他可写0002 控制命令:IPC_CREAT(值为0001000) 对消息队列的控制 格式: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。 删除消息队列示例 qid = atoi ( argv[1] ); /* 通过命令行参数得到组ID */ s
您可能关注的文档
- RLFAILURE优化.doc
- 迅雷7绿化au3源码.doc
- bat文件处理电脑.doc
- 电脑运行速度变快的方法.doc
- 信念工作坊(第一课).ppt
- 金融学finance 02.ppt
- 三分钟让你的电脑快3倍!!!!.doc
- 三分钟让电脑速度加快三倍.doc
- 如何提高Win7的运行速度.doc
- 如何让电脑运行如飞.doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
文档评论(0)