实验三 进程间的通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三进程间的通信

1、实验目的

学习如何利用管道机制、消息缓冲队列进行进程间的通信,并加深对上述通信机制的理解。

2、实验内容

(1)了解系统调用pipe()、msgget()、msgsnd()、msgrcv()的功能和实现过程。

(2)编写一段程序,使其用管道来实现父子进程之间的进程通信。子进程向父进程发送自己的进程标识符,以及字符串“is sending a message to parent!”。父进程则通过管道读出子进程发来的消息,将消息显示在屏幕上,然后终止。

(3)编写一段程序,使用消息缓冲队列来实现client进程和server进程之间的通信。server进程先建立一个关键字为SVKEY (如75)的消息队列,然后等待接收类型为REQ(如1)的消息;在收到请求消息后,它便显示字符串“serving for client”和接收到的client进程的进程标识数,表示正在为client进程服务;然后再向client进程发送一应答消息,该消息类型是client 进程的进程标识数,而正文则是server进程自己的标识数。client进程则向消息队列发送类型为REQ的消息(消息的正文为自己的进程标识数)以取得server进程的服务,并等待server 进程发来的应答;然后显示字符串“receive reply form”和接收到的server进程的标识符。

1、client.c

2、server.c

3、思考题

上述通信机制各有什么特点?它们分别适合于何种场合?

答:

管道通信的特点:

(1)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;

(2)只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);

(3)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。

(4)数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

管道适用于处理大量的同步操作问题。

消息队列的特点:

(1)消息队列机制增加了管理的负担

(2)消息队列通信机制非常快捷

(3)消息队列机制是异步信息处理,不是实时的

适用的场合:

(1)当发送者不需要等待应答时,

(2)当发送者和接收者有可能不在同一时间运行时,

(3)当与一组接收者中任何一个接收者进行通信时

(4)当要求登陆的时候

(5)对于多个发送者和接收者之间复杂的交互操作

相关文档
最新文档