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

消息的发送与接收实验.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
消息的发送与接收实验

消息的发送与接收实验? Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通信机制、共享存储区机制及信息量机制。 1).了解消息的定义; 2).熟悉消息传送的机理。使用系统函数msgget()、msgsnd()、msgrev()、msgctl()编制一长度为1K的程序,实现消息的创建、发送和接收。 2.实验环境(操作系统、硬件及其它条件) 操作系统:solaris操作系统 硬件:内存:2.0GB 处理器:Intel(R) Pentium(R) D CPU 3.00 GHz 其它条件:电源充足、系统正常、操作步骤正确无误。 2. 实验方法(实验步骤) 1).实验过程分析 (1)为了便于操作和观察结果,用一个程序作为“引子”,先后fork两个子进程,SERVER 和CLIENT,进行通信。 (2)SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束的信号,取消该队列,并退出SERVER。SERVER每接收到一个消息后显示一句“(server)received”。 (3)CLIENT端使用key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,即是SERVER端需要的结束信号。CLIENT每发送一条消息后显示“(client)sent”。 (4)父进程在SERVER 和CLIENT均退出后结束。 4.实验分析 1).消息:消息是一个格式化的可变长的信息单元,消息机制允许由一个进程给其他任意进程发送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。 2).系统调用函数说明: (1)msgget() 功能:创建一个消息,获得一个消息的描述符。 系统调用格式:msgqid=msgget(key,flag); 其中,key是用户指定的消息队列的名字;flag是用户设置的标志和访问方式,如IPC-CREAT。msgqid是该系统调用返回的描述符,失败时则返回-1。 (2)msgsnd() 功能:向指定的消息队列发送一个消息,并将该消息链接到该消息队列的尾部。 系统调用格式:msgsnd(msgqid,msgp,size,flag); 其中,msgqid是返回消息队列的描述符;msgp是指向用户消息缓冲区的一个结构体指针。缓冲区中包括消息类型和消息正文。 { Long mtype; Char mtext[]; } size指示由msgp指向的数据结构中字符数组的长度,即消息的长度。flag规定当核心用尽内部缓冲空间时应执行的动作:进程是等待,还是立即返回。若在标志flag中未设置IPC-NOWAIT位,则当该消息队列中的字节数超过最大值时,或系统范围的消息数超过某一最大值时,调用msgsnd进程睡眠。若设置IPC-NOWAIT,则在此情况下,msgsnd立即返回。 (3)msgrcv() 功能:从指定的消息队列中接收指定类型的消息。 系统调用格式:msgrcv(msgqid,msgp,size,type,flag); 其中,msgqid,msgp,size,flag和msgsnd中的对应参数相似,type是规定要读的消息类型,若type=0,接收该队列的第一个消息,并将它返回给调用者;若type为正整数,接收类型type的第一个消息;若type为负整数,接收小于等于type绝对值的最低类型的第一个消息。flag规定倘若该队列无消息,核心应做的操作。如此时设置了IPC-NOWATI标志,则立即返回,若在flag中设置了MS-NOERROR,且所接收的消息大于size,则核心截断所接收的消息。 (4)msgctl() 功能:消息队列的操纵。读取消息队列的状态信息并进行修改,如查询消息队列描述符、修改它的许可权及删除该队列等。 系统调用格式:msgctl(msgqid,cmd,buf); 其中,函数调用成功时返回0,不成功则返回-1。buf是用户缓冲区地址,供用户存放控制参数和查询结果;cmd是规定的命令。命令可分三类: (1)IPC-STAT。查询有关消息队列情况的命令。如查询队列中的消息数目、队列中的最大字节数、最后一个发送消息的进程标识符、发送时间等。 (2)IPC-SET。按buf指向的结构中的值,设置和改变有关消息队列属性的命令。如改变消息队列的用户标识符、消息队列的许可权等。 (3)IPC-RMID。消除消息队列的标识符。 6. 最终代码  #include stdio.h #include sys/types.h #include

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档