实验三进程间的通信.doc
文本预览下载声明
实验三 进程间的通信
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进程的标识符。
client.c
2、server.c
3、思考题
上述通信机制各有什么特点?它们分别适合于何种场合?
答:
管道通信的特点:
(1) 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;
(2) 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);
(3)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
(4) 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
管道适用于处理大量的同步操作问题。
消息队列的特点:
(1)消息队列机制增加了管理的负担
(2)消息队列通信机制非常快捷
(3)消息队列机制是异步信息处理,不是实时的
适用的场合:
(1)当发送者不需要等待应答时,
(2)当发送者和接收者有可能不在同一时间运行时,
(3)当与一组接收者中任何一个接收者进行通信时
(4)当要求登陆的时候
(5)对于多个发送者和接收者之间复杂的交互操作
显示全部