/*客戶端*/ #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é)果: ![]() ![]() |
|