zoukankan      html  css  js  c++  java
  • 基于内存的通信之一 “内核共享消息队列”

    编程步骤:

    1.创建共享消息队列/得到消息队列

    2.操作消息队列(发送、接收等)

      

    3.删除队列

    案例应用:

    创建两个进程A、B

    其中A 如下:

    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct msgbuf
    {
        long type;
        char data[32];
    };
    main()
    {
        key_t key;
        int msgid;
        int i;
        struct msgbuf msg;
        
        //1创建消息队列
        key=ftok(".",200);
        if(key==-1) printf("ftok err:%m
    "),exit(-1);
        
        msgid=msgget(key,0/*IPC_CREAT|IPC_EXCL|0666*/);
        if(msgid==-1)printf("get err:%m
    "),exit(-1);
        //2构造消息
            
        //3发送消息
        for(i=1;i<=10;i++)
        {
            bzero(msg.data,sizeof(msg.data));
            msg.type=1;
            sprintf(msg.data,"MessageI:%d",i);
            msgsnd(msgid,&msg,sizeof(msg.data),0);
        }
        for(i=1;i<=10;i++)
        {
            bzero(msg.data,sizeof(msg.data));
            msg.type=2;
            sprintf(msg.data,"MessageII:%d",i);
            
            msgsnd(msgid,&msg,sizeof(msg.data),0);
        }
        //4删除队列
        //msgctl(msgid,IPC_RMID,0);
    }

    B进程如下:

    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct msgbuf
    {
        long type;
        char data[32];
    };
    main()
    {
        key_t key;
        int msgid;
        int i;
        struct msgbuf msg;
        //1得到消息队列
        key=ftok(".",200);
        if(key==-1) printf("ftok err:%m
    "),exit(-1);
        
        msgid=msgget(key,0);
        if(msgid==-1)printf("get err:%m
    "),exit(-1);
        //2构造消息
            
        //3接收消息
        while(1)
        {
            bzero(&msg,sizeof(msg));
            msg.type=2;
            msgrcv(msgid,&msg,sizeof(msg.data),2,0);
            printf("%s
    ",msg.data);
        }
        
    }
  • 相关阅读:
    IT题库-134 | String、StringBuffer和StringBuilder的区别
    Java NIO 总结
    Java 性能分析工具-JProfiler
    Java 性能分析工具-MAT
    java 获取dump文件
    GC总结
    String总结
    堆-对象的分配与回收过程
    java 生产环境调优排查总结
    记一次因为Gradle与Lombok不兼容导致编译时的内存溢出 Expiring Daemon because JVM heap space is exhausted
  • 原文地址:https://www.cnblogs.com/huacw/p/3581766.html
Copyright © 2011-2022 走看看