版权声明:本文为博主原创文章,未经博主允许不得转载。 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:消息类型
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);
}
删除: