Linux学习笔记-消息队列的接收

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/86682618

目录

 

 

接收消息

举个例子


 

接收消息

#include <sys/msg.h>
ssize_t msgrcv(int msgqid, void *ptr, size_t nbytes, long type, int flag);
//返回值:成功返回消息的数据部分长度,出错返回-1

参数:

msgqid:消息队列的ID;

ptr:指向存放消息的缓存;

nbytes:消息存储的大小,不包括mtype的大小。计算方式;

nbytes = sizeof(struct mymesg) - sizeof(long)

type:消息类型

扫描二维码关注公众号,回复: 5150377 查看本文章

type == 0:获取消息队列中第一个消息;

type > 0:获取消息队列中类型为type的第一个消息;

type < 0:获取消息队列中小于或等于type绝对值的消息。

flag:0或者IPC_NOWAIT

 

举个例子

代码如下:

#include <sys/msg.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct{
        long type;
        int start;
        int end;
}MSG;

int main(int argc, char *argv[]){


        if(argc < 3){

                printf("usage: %s key type\n", argv[0]);
                exit(1);
        }

        key_t key = atoi(argv[1]);
        long type = atoi(argv[2]);

        int msq_id;
        if((msq_id = msgget(key, 0777)) < 0){

                perror("msgget error");
        }

        //从消息队列中接收指定类型的消息
        MSG m;
        if(msgrcv(msq_id, &m, sizeof(MSG) - sizeof(long), type, IPC_NOWAIT) < 0){

                perror("msgrcv error");
        }
        else{

                printf("type: %d start: %d end:%d\n", m.type, m.start, m.end);
        }
        exit(0);
}

删除:

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/86682618