消息队列

Posted qiuyuwutong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息队列相关的知识,希望对你有一定的参考价值。

前提:基于Linux系统的学习

消息队列
1 获取键值  ftok(3)
2 获取消息队列的id     msgget(2)
3 向消息队列发送消息   msgsnd(2)
4 从消息队列获取消息    msgrcv(2)

//向消息队列中添加消息
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct msgbuf{
    long mtype;
    char mtext[128];
}msg_t;

int main(){
    msg_t msg;
    key_t key=ftok(".",23); //获取键值
    if(key==-1){
        perror("key");
        return -1;
    }
    int msgid=msgget(key,IPC_CREAT|0644);//获取消息队列id
     if(msgid==-1){
        perror("msgget");
        return -1;
    }
        //初始化具体的消息队列
    msg.mtype=3;
    strcpy(msg.mtext,"hector..");
        //添加消息    
    int snd=msgsnd(msgid,&msg,strlen(msg.mtext),0);
    if(snd==-1){
        perror("msgsnd");
        return -1;
    }

    return 0;
}
//从消息队列中取消息
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

typedef struct msgbuf{
    long mtype;
    char mtext[128];
}msg_t;

int main(){
    msg_t msg;
    key_t key=ftok(".",23);
    if(key==-1){
        perror("ftok");
        return -1;
    }
    int msgid=msgget(key,IPC_CREAT|0644);
    if(msgid==-1){
        perror("msgget");
        return -1;
    }
    ssize_t rcv=msgrcv(msgid,&msg,128,3,IPC_NOWAIT);
    if(rcv==-1){
        perror("msgrcv");
        return -1;
    }
    write(1,msg.mtext,rcv);
    return 0;
}

 





以上是关于消息队列的主要内容,如果未能解决你的问题,请参考以下文章

Android UI 线程消息队列调度顺序

# Java 常用代码片段

# Java 常用代码片段

RocketMQ - 如何用死信队列解决消费者异常

消息队列为什么要使用消息队列消息队列优缺点??

没有带有拉动刷新的互联网消息 webview 片段