当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
消息队列的使用
发布时间:2010/12/4 23:03:34 来源:城市学习网 编辑:ziteng
 源码:

  #include <sys/types.h>

  #include <sys/ipc.h>

  #include <sys/msg.h>

  typedef struct

  {

  int msg_type;

  char msg_data[512];

  } msgstr;

  main()

  {

  int key = 4000;

  int msgid = 0;

  int msgid1 = 0;

  //int msgid2 = 0;

  int i=0,j=0;

  msgstr send_msg,recv_msg;

  //创建消息队列的第一个节点

  msgid = msgget(key,IPC_CREAT|0660);

  if(msgid < 0)

  printf("message 1 create fail[msgid = %d]\n",msgid);

  else

  printf("message 1 create success[msgid = %d]\n",msgid);

  //创建消息队列的第二个节点

  msgid1 = msgget(key+100,IPC_CREAT|0660);

  if(msgid1 < 0)

  printf("message 2 create fail[msgid1 = %d]\n",msgid);

  else

  printf("message 2 create success[msgid1 = %d]\n",msgid);

  //发送第一个节点消息

  send_msg.msg_type = 100;

  memset(send_msg.msg_data,0,512);

  strcpy(send_msg.msg_data,"This is my first message.");

  i = msgsnd(msgid,&send_msg,512,0);

  if(i == 0)

  printf("message 1 send success!\n");

  else

  printf("message 1 send failed!\n");

  //发送第二个节点消息

  send_msg.msg_type = 200;

  memset(send_msg.msg_data,0,512);

  strcpy(send_msg.msg_data,"This is my second message.");

  i = msgsnd(msgid1,&send_msg,512,0);

  if(i == 0)

  printf("message 2 send success!\n");

  else

  printf("message 2 send failed!\n");

  //发送第三个节点消息

  send_msg.msg_type = 300;

  memset(send_msg.msg_data,0,512);

  strcpy(send_msg.msg_data,"This is my third message.");

  i = msgsnd(0,&send_msg,512,0);

  if(i == 0)

  printf("message 3 send success!\n");

  else

  printf("message 3 send failed!\n");

  //接收第一个节点消息

  recv_msg.msg_type = 0;

  memset(recv_msg.msg_data,0,sizeof(recv_msg.msg_data));

  j = msgrcv(msgid,&recv_msg,512,0,IPC_NOWAIT);

  if(j <= 0)

  printf("message receive failed\n");

  else

  {

  printf("message receive success[length: %d]\n",j);

  printf("message type = %d\n",recv_msg.msg_type);

  printf("message char data: %s\n",recv_msg.msg_data);

  }

  //接收第二个节点消息

  recv_msg.msg_type = 0;

  memset(recv_msg.msg_data,0,sizeof(recv_msg.msg_data));

  j = msgrcv(msgid1,&recv_msg,512,0,IPC_NOWAIT);

  if(j <= 0)

  printf("message receive failed\n");

  else

  {

  printf("message receive success[length: %d]\n",j);

  printf("message type = %d\n",recv_msg.msg_type);

  printf("message char data: %s\n",recv_msg.msg_data);

  }

  }

  运行结果:

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved