newlist

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

消息队列


      A 和 B 是 相对独立的两支程序,现在 A  传送  10 个Student 到  B

      B 将Student 读取出来,显示在界面上

   
      然后 B  传送  10 个 Teacher 到  A  ,A 显示 teacher 在界面上

#include "public.h"

typedef struct students
{
 long mtype;
 int no;
 char username[100];
}*StusNode,SNode;


int main()
{
 int ret=-1;
 int msg_flags,msg_id;
 key_t key;

 struct msqid_ds msg_info;
 SNode msg_mbuf[10],msg_mbufs[10];
 
 
 for (int t=0;t<10;t++)
 {
  msg_mbuf[t].mtype=10;
  msg_mbuf[t].no=t;
  strcpy(msg_mbuf[t].username,"students");
 }


 int msg_sflags,msg_rflags;
 char *msgpath="/ipc/msg/";
 key=ftok(msgpath,'b');
 if (key!=-1)
 {
  printf("成功创建KEY\n");
 }
 else
 {
  printf("建立KEY失败\n");
 }
 msg_flags=IPC_CREAT|IPC_EXCL;
 msg_id=msgget(key,msg_flags|0x0666);
 if (-1==msg_id)
 {
  printf("消息建立失败\n");
  return 0;
 }
 msg_sflags=IPC_NOWAIT;
 //msg_mbuf.mtypes=10;
 for (int t=0;t<10;t++)
 {
  int len = sizeof(SNode)-sizeof(long);
  ret=msgsnd(msg_id,&msg_mbuf[t],len,msg_sflags);
  
  if (-1==ret)
  {
   printf("发送消息失败\n");
  }
  else
   printf("发送成功\n");
 }
 msg_rflags=IPC_NOWAIT|MSG_NOERROR;
 for (int t=0;t<10;t++)
 {
  int len = sizeof(SNode)-sizeof(long);
  ret=msgrcv(msg_id,&msg_mbufs[t],len,10,msg_rflags);
  printf("no = %d username = %s\n",msg_mbufs[t].no,msg_mbufs[t].username);
  if (-1==ret)
  {
   printf("接受消息失败\n");
  }
  else
  {
   printf("接受消息成功,长度:%d\n",ret);
  }
 }

 ret=msgctl(msg_id,IPC_RMID,NULL);
 if (-1==ret)
 {
  printf("删除消息失败\n");
   
 }
 else
  printf("删除消息成功\n");

 


 return 0;
}


 

posted on 2011-11-24 14:41  一枚程序  阅读(392)  评论(0)    收藏  举报