分享

XSI IPC通信之消息队列

 昵称15757854 2014-05-13
/*send msg*/
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#define MAX_MSG_LENGTH 1024
//自己定义的消息格式
typedef struct msgbuf
{
 long types;
 char texts[MAX_MSG_LENGTH];
}SYS_MSG;
int main(int argc, char *argv[])
{
 int msgid;
 key_t key;
 int retval;
 SYS_MSG mybuf;
 //通过路径名联系两者之间的关系
 if((key = ftok("/", 4)) < 0)
 {
  perror("ftok");
  }
  if((msgid = msgget(key, IPC_CREAT|0777)) < 0)
  {
     perror("msgget");
  }
  mybuf.types = 1;
  strcpy(mybuf.texts, "hello world");
  if((msgsnd(msgid, &mybuf, MAX_MSG_LENGTH, 0)))  //发送消息类型为1的消息。
  {
  perror("msgsnd");
  }
 mybuf.types = 2;
 strcpy(mybuf.texts, "how are you");
 if((msgsnd(msgid, &mybuf, MAX_MSG_LENGTH, 0)))  //发送消息类型为2的消息。
 {
  perror("msgsnd");
 }
 mybuf.types = 3;
 strcpy(mybuf.texts, "i'm fine");
 if((msgsnd(msgid, &mybuf, MAX_MSG_LENGTH, 0)))  //发送消息类型为3的消息。
  {
  perror("msgsnd");
 }
 return 0;
}
 
 
/*recv msg*/
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#define MAX_MSG_LENGTH 50
typedef struct msgbuf
{
 long types;
 char texts[MAX_MSG_LENGTH];
}SYS_MSG;
int main(int argc, char *argv[])
{
 int msgid;
 key_t key;
 int retval;
 SYS_MSG mybuf;
 if((key = ftok("/", 4)) < 0)
 {
  perror("ftok");
 }
 if((msgid = msgget(key, IPC_CREAT|0777)) < 0)
 {
  perror("msgget");
 }
 while(1)
 {
      //输入想接收的消息类型
      scanf("%ld", &mybuf.types);
      memset(mybuf.texts, 0, MAX_MSG_LENGTH);
 
   if(0 == mybuf.types)
      {
          break;
     }
          
                                                                                             
      //接收消息类型为上面输入的消息类型
      if(( msgrcv(msgid, &mybuf, MAX_MSG_LENGTH, mybuf.types, MSG_NOERROR)) < 0)
    {
    perror("msgrcv");
   }
         
    printf("msgrcv : %s\n", mybuf.texts);
              
  }    
 
  if(( msgctl(msgid, IPC_RMID, NULL)) < 0)   //从内核中删除消息队列    
 {    
    perror("msgctl");
  }     
 return 0;    
}
 
 
 
 
 
 
          

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多