• 代码示例_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 待续。。。
  • 相关阅读:
    Quora的技术探索
    基于移动互联网的电子商务个性化推荐的一些思考
    想个法子找出性能差的SQL
    结束——2012年微软精英挑战赛
    sql 查询时间执行长的sql语句
    NET好书盘点
    最后两个编程题
    网络七层协议
    使用WCF创建Restful服务
    一步一步学Entity FrameWork 4
  • 原文地址:https://www.cnblogs.com/panda-w/p/11049411.html
Copyright © 2020-2023  润新知