zoukankan      html  css  js  c++  java
  • 代码示例_IPC_消息队列

    消息队列

     


     

     

    1.头文件

    #ifndef __MSG_H__
    #define __MSG_H__
    
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    typedef struct{
        long mtype;
        char mtext[1024];
    }msgbuf;
    
    
    key_t Get_Key(void);
    int Msg_Creat(key_t key);
    ssize_t Msg_Read(int msgid,void *msg_buf, size_t msg_size);
    int Msg_Write(int msgid, const void *msg_buf, size_t msg_size);
    int Msg_Delet(int msgid);
    
    
    
    #endif

    2. msg.c

    #include"msg.h"
    
    
    //获取key
    key_t Get_Key(void)
    {
        key_t key =ftok("/",0x66);
        if(key <0){
            perror("Get_Key ftok failed");
            exit(1);
        }
        return key;
    }
    
    //创建获取
    int Msg_Creat(key_t key)
    {
        int msgid = msgget(key,0666|IPC_CREAT);
        if(msgid<0){
            perror("msgget failed");
            exit(1);
        }
        return msgid;
    }
    
    
    //
    ssize_t Msg_Read(int msgid,void *msg_buf, size_t msg_size)
    {
        ssize_t msgrcv_num =msgrcv(msgid,msg_buf,msg_size,0,0);
        if(msgrcv_num <0){
            perror("Msg_Read msgrcv failed");
            exit(1);
        }
        return msgrcv_num;
    }
    
    //
    int Msg_Write(int msgid, const void *msg_buf, size_t msg_size)
    {
        int msgsnd_num =msgsnd(msgid,msg_buf,msg_size,0);
        if(msgsnd_num<0){
            perror("Msg_Write msgsnd failed");
            exit(1);
        }
        return msgsnd_num;
    }
    
    
    //删除
    int Msg_Delet(int msgid)
    {
        int msgctl_rel =msgctl(msgid,IPC_RMID,NULL);    
        if(msgctl_rel <0){
            perror("Msg_Delet msgctl failed");
            exit(1);
        }
        return msgctl_rel;
    }


    2.server

    #include "msg.h"
    
    msgbuf msgbuf_t;
    
    int main(void)
    {
        key_t key =Get_Key();
        int msgid =Msg_Creat(key);
        memset(&msgbuf_t, 0, sizeof(msgbuf_t));    
        while(1){
            msgbuf_t.mtype =6;
            Msg_Read(msgid,&msgbuf_t,sizeof(msgbuf_t));
            fputs(msgbuf_t.mtext, stdout);
            if(strncmp(msgbuf_t.mtext, "quit", 4)==0)
                break;
        }
        Msg_Delet(msgid);
        
        return 0;
    }

    3.client

    #include "msg.h"
    
    msgbuf msgbuf_t;
    
    int main(void)
    {
        key_t key =Get_Key();
        int msgid =Msg_Creat(key);
        memset(&msgbuf_t, 0, sizeof(msgbuf_t));    
        while(1){
            msgbuf_t.mtype =6;
            fgets(msgbuf_t.mtext, 1024, stdin);
            Msg_Write(msgid,&msgbuf_t,sizeof(msgbuf_t));
            if(strncmp(msgbuf_t.mtext, "quit", 4)==0)
                break;
        }
        Msg_Delet(msgid);    
        
        return 0;
    }

     

     


     

     

     

     success !

     

     

     

    Stay hungry, stay foolish 待续。。。
  • 相关阅读:
    x64下读取SSDT表,并且获取SSDT表函数.
    C++ 常用代码片段整理
    ShellCode 定位EIP
    内核与应用通讯的几种方式转载
    微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问
    Win10 企业版激活方法
    centos7 给.sh 文件赋值可执行权限
    k8s nginx ingress 高可用部署(最新版,支持 k8s 1.221.19)第3篇 测试
    skywalking 跟踪grpc的链路
    k8s nginx ingress 高可用部署(最新版,支持 k8s 1.221.19)第一篇
  • 原文地址:https://www.cnblogs.com/panda-w/p/11049411.html
Copyright © 2011-2022 走看看