分享

消息队列实现进程间通信

 Ethan的博客 2011-11-19
/*客户端*/
#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;
  }



结果:
 


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多