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;
    }


     

  • 相关阅读:
    ITU 测试向量 下载地址
    转:数字集群移动通信系统技术体制综述及优选准则
    转:留一手教你在美国亚马逊网购
    离散度的测量(来自百度百科)与应用(自己理解)
    G.718的mos分
    【转】关于Alchemy
    Ogg Squish 0.98 源代码
    转:分布式视频编码关键技术及其发展趋势
    分布式视频编码概述与应用(来自百度百科)和WynerZiv Coding算法
    @PostConstruct和@PreDestroy注解在spring源码中生效的流程
  • 原文地址:https://www.cnblogs.com/newlist/p/2253860.html
Copyright © 2011-2022 走看看