/*客户端*/ #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'); /*打开标识号为MSGKEY的消息队列*/ 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"); /* 发送消息msg*/ msgsnd(msgid,p,sizeof(p->mtext),0); } /*退出系统*/ exit(1); } int main(){ client(); return 0; } **************************华丽的分割线********************* /*服务端*/ #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; /*创建标识号为MSGKEY的消息队列*/ 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); /*删除消息队列,归还资源*/ msgctl(msgid,IPC_RMID,p); /*退出*/ exit(1); } int main(){ server(); return 0; } 结果: ![]() ![]() |
|