实验三_进程间的通信.doc

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

本科实验报告专用纸

课程名称操作系统原理成绩评定

实验项目名称进程间的通信指导教师

实验项目编号实验项目类型实验地点

学生姓名学号

学院系专业

实验时间年月日上午~月日上午温度℃湿度

实验目的和要求

实验目的:

学习如何利用管道机制或消息缓冲队列进行进程间的通信,并加深对上述通信机制的理解。提高学生分析问题和解决问题的能力,并学习撰写规范的科学研究报告(论文)。

实验要求:了解系统pipe(),msgsnd(),msgrcv()的功能和实现过程。

实验原理和主要内容

实验内容:

编写一段程序,使用管道来实现父子进程之间的进程通信。子进程向父进程发送自己的进程表示符,以及某字符串。父进程则通过管道读出子进程发来的消息,将消息显示在屏幕上,然后终止。

编写一段程序,使其用消息缓冲队列来实现client和server进程之间的通信。

实验原理:(使用的系统调用命令说明或算法及程序详细设计)

Linux命令

作用

格式

ls

列出当前工作目录下的文件

cd

进出工作目录

cd目的目录

rm

删除文件

rm指定文件

vi

打开或新建文件

vi文件名

-a

打开或新建文件后追加编辑该文件

-wq

保存当前文件并退出

gcc、-o

编译文件并产生可执行文件

gcc-文件名-o文件名

./

打开exe执行文件

./文件名

exit

退出当前用户

实验函数说明

包含头文件

#includesys/types.h

#includesys/ipc.h

#includesys/msg.h

(2)msgsnd()函数

intmsgsnd(intmsqid,constvoid*msgp,size_tmsgsz,intmsgflg);

//将消息送入消息队列

?

参数:??

msqid:消息队列的识别码。

msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,形态如下

structmsgbuf{

???longmtype;????/*消息类型,必须0*/

???charmtext[1];?/*消息文本*/

};

msgsz:消息的大小。

msgtyp:从消息队列内读取的消息形态。如果值为零,则表示消息队列中的所有消息都会被读取。

msgflg:用来指明核心程序在队列没有数据的情况下所应采取的行动。如果msgflg和常数IPC_NOWAIT合用,则在msgsnd()执行时若是消息队列已满,则msgsnd()将不会阻塞,而会立即返回-1,如果执行的是msgrcv(),则在消息队列呈空时,不做等待马上返回-1,并设定错误码为ENOMSG。当msgflg为0时,msgsnd()及msgrcv()在队列呈满或呈空的情形时,采取阻塞等待的处理模式。

???

返回说明:??

成功执行时,msgsnd()返回0,失败返回-1

(3)msgrcv()函数

ssize_tmsgrcv(intmsqid,void*msgp,size_tmsgsz,longmsgtyp,intmsgflg);

//从消息队列读取信息.

成功执行时,返回0,失败返回-1

主要仪器设备

PC机、Linux操作系统

调试分析

server进程先建立一个关键字为SVKEY(如75)的消息队列,然后等待接收类型为REQ(如1)的消息;在收到请求消息后,它便显示字符串servingforclient和接收到的client进程的进程标识数,表示正在为client进程服务;然后再向client进程发送一应答消息,该消息的类型是client进程的进程标识数,而正文则是server进程自己的标识数。client进程则向消息队列发送类型为REQ的消息(消息的正文为自己的进程标识数)以取得server进程的服务,并等待server进程发来的应答;然后显示字符串receivereplyfrom和接收到的server进程的标识数。

测试结果

程序“pipe.exe”的运行结果

程序“clt_svr.exe”的运行结果

附录

程序一:pipe.c

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档