zoukankan      html  css  js  c++  java
  • 消息队列

    #include "public.h"

    void msg_show_attr(int msg_id,struct msqid_ds msg_info)
    {

     int ret=-1;
     sleep(1);
     ret=msgctl(msg_id,IPC_STAT,&msg_info);//获取消息
     if (-1==ret)
     {
      printf("获得消息信息失败\n");
      return ;
     }
     printf("\n");
     printf("现在队列中字节数:%d\n",msg_info.msg_cbytes);
     printf("队列中消息数:%d\n",msg_info.msg_qnum);
     printf("队列照哦给你最大字节数:%d\n",msg_info.msg_qbytes);
     printf("最后发送消息的进程pid:%d\n",msg_info.msg_lspid);
     printf("最后接受消息的进程pid:%d\n",msg_info.msg_lrpid);
     printf("最后发送消息的时间:%s\n",ctime(&(msg_info.msg_stime)));
     printf("最后接受消息的时间:%s\n",ctime(&(msg_info.msg_rtime)));
     printf("最后变化时间:%s\n",ctime(&(msg_info.msg_ctime)));
     printf("消息UID是:%d\n",msg_info.msg_perm.uid);
     printf("消息GID是:%d\n",msg_info.msg_perm.gid);
    }

    int main()
    {
     int ret=-1;
     int msg_flags,msg_id;
     key_t key;
     struct msgmbuf{
      int mtypes;
      char mtext[10];
     };
     struct msqid_ds msg_info;
     struct msgmbuf msg_mbuf;

     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_show_attr(msg_id,msg_info);
     msg_sflags=IPC_NOWAIT;
     msg_mbuf.mtypes=10;
     memcpy(msg_mbuf.mtext,"测试消息",sizeof("测试消息"));//复制字符串
     ret=msgsnd(msg_id,&msg_mbuf,sizeof("测试消息"),msg_sflags);
     
     if (-1==ret)
     {
      printf("发送消息失败\n");
     }
     msg_show_attr(msg_id,msg_info);
     msg_rflags=IPC_NOWAIT|MSG_NOERROR;
     ret=msgrcv(msg_id,&msg_mbuf,10,10,msg_rflags);
     if (-1==ret)
     {
      printf("接受消息失败\n");
     }
     else
     {
      printf("接受消息成功,长度:%d\n",ret);
     }
     msg_show_attr(msg_id,msg_info);
     msg_info.msg_perm.uid=8;
     msg_info.msg_perm.gid=8;
     msg_info.msg_qbytes=12345;
     ret=msgctl(msg_id,IPC_SET,&msg_info);//设置消息属性
     if (-1==ret)
     {
      printf("设置消息属性失败\n");
      return 0;
     }
     msg_show_attr(msg_id,msg_info);
     ret=msgctl(msg_id,IPC_RMID,NULL);
     if (-1==ret)
     {
      printf("删除消息失败\n");
      return 0;
     }

     return 0;
    }


     

  • 相关阅读:
    2019-2020-1 20175315 20175322 20175334 实验五 通讯协议设计
    bfs思路总结
    蓝桥杯-带分数
    Passive WiFi Tracking
    openWRT刷机设置
    研究生若干事
    Dijkstra算法和Floyed算法
    最小生成树prim算法
    无穷大量0x3f3f3f3f
    杭电OJ题目分类
  • 原文地址:https://www.cnblogs.com/newlist/p/2253860.html
Copyright © 2011-2022 走看看