/*客戶端*/
#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include <stdio.h>
#define MSGKEY 75
struct msgform{
long mtype;
char mtext[1000];
}msg;
void client(){
int msgid;
key_t msgkey;
struct msgform msgdata,*p;
p=&msgdata;
msgkey=ftok("mrecv",'a');
/*打開標(biāo)識(shí)號(hào)為MSGKEY的消息隊(duì)列*/
msgid=msgget(msgkey,IPC_CREAT|0666);
int i;
for(i=10;i>=1;i--){
printf("輸入消息:");
gets(p->mtext);
p->mtype=i;
printf("(client)sentt\n");
/* 發(fā)送消息msg*/
msgsnd(msgid,p,sizeof(p->mtext),0);
}
/*退出系統(tǒng)*/
exit(1);
}
int main(){
client();
return 0;
}
**************************華麗的分割線*********************
/*服務(wù)端*/
#include <sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#define MSGKEY 75
struct msgform{
long mtype;
char mtext[1000];
}msg;
void server(){
key_t msgkey;
int msgid;
int reval;
/*創(chuàng)建標(biāo)識(shí)號(hào)為MSGKEY的消息隊(duì)列*/
struct msgform msgdata,*p;
p=&msgdata;
msgkey=ftok("mrecv",'a');
msgid=msgget(msgkey,IPC_CREAT|0666);
do{
/*接收消息*/
reval=msgrcv(msgid,p,sizeof(p->mtext),0,0);
if(reval==-1){
printf("read msg error\n");
}else printf("read from msg queue%d bytes\n",reval);
/*打印“接收到消息”提示信息*/
printf("接收到的消息:%ld\n%s\n",p->mtype,p->mtext);
}while(p->mtype!=1);
/*刪除消息隊(duì)列,歸還資源*/
msgctl(msgid,IPC_RMID,p);
/*退出*/
exit(1);
}
int main(){
server();
return 0;
}
結(jié)果: