文档详情

实验三进程间的通信.doc

发布:2017-08-14约1.09千字共4页下载文档
文本预览下载声明
实验三 进程间的通信 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)对于多个发送者和接收者之间复杂的交互操作
显示全部
相似文档