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);
}