操作系统 进程通信实验

1)用一个程序作为“引子”,先后fork()两个进程,SERVER和CLIENT,进行通信。

(2)SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER。SERVER每接受到一个消息后显示一句“(Server)received”,然后发送一个返回消息给CLIENT端,显示一句“(Server)sent”。

(3)CLIENT端使用key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后一个消息,即是SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(Client)sent”,等接受SERVER端的返回消息后,显示一句“(Client)received”,再在发送下一条消息。

(4)父进程在SERVER和CLIENT都退出后结束。

源代码:

#include<stdio.h>

#include<sys/msg.h>

#include<sys/ipc.h>

#include<sys/types.h>

 

#define msgkey 75

 

struct msgform

{

long msgtype;

char msgtext[1000];

}msg;

 

int msgqid,i;

void cilent(){

int i;

msgqid=msgget(msgkey,0777);

for(i=10;i>=1;i--){

if(

msg.msgtype=i;

printf("(cilent)send\n");

msgsnd(msgqid,&msg,1000,0);

}

exit(0);

}

 

void server(){

msgqid=msgget(msgkey,0777|IPC_CREAT);

do{

msgrcv(msgqid,&msg,1000,0,0);

printf("(server) received\n");

msgsnd(msgqid,&msg,sizeof(int),0);

}while(msg.msgtype!=1);

 

msgctl(msgqid,IPC_RMID,0);

exit(0);

}

 

main(){

while((i=fork())==-1);

if(!i) server();

while((i=fork())==-1);

if(!i) cilent();

wait(0);

wait(0);

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值