消息队列

前提:基于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;
}

 

posted on 2018-07-22 14:10  秋雨丶梧桐  阅读(146)  评论(0编辑  收藏  举报

导航