一、基础概念
msgbuf
结构体(用于定义消息内容)和mq_attr
结构体(用于设置消息队列的属性,如最大消息数、最大消息大小等)。二、相关优势
三、类型
mq_open
(打开或创建消息队列)、mq_send
(发送消息)、mq_receive
(接收消息)等。msgget
(获取或创建消息队列)、msgsnd
(发送消息)、msgrcv
(接收消息)等。四、应用场景
五、常见问题及解决方法
msgsnd
函数可能会失败。以下是一个简单的POSIX消息队列发送和接收消息的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mqueue.h>
#define QUEUE_NAME "/test_queue"
#define MAX_MSG_SIZE 100
int main() {
mqd_t mq;
struct mq_attr attr;
attr.mq_flags = 0;
attr.mq_maxmsg = 10;
attr.mq_msgsize = MAX_MSG_SIZE;
// 创建消息队列
mq = mq_open(QUEUE_NAME, O_CREAT | O_RDWR, 0644, &attr);
if (mq == -1) {
perror("mq_open");
exit(1);
}
// 发送消息
char *msg = "Hello, World!";
if (mq_send(mq, msg, strlen(msg)+1, 0) == -1) {
perror("mq_send");
mq_close(mq);
mq_destroy(QUEUE_NAME);
exit(1);
}
// 接收消息
char buffer[MAX_MSG_SIZE];
if (mq_receive(mq, buffer, MAX_MSG_SIZE, NULL) == -1) {
perror("mq_receive");
} else {
printf("Received message: %s
", buffer);
}
mq_close(mq);
mq_destroy(QUEUE_NAME);
return 0;
}
在这个示例中:
领取专属 10元无门槛券
手把手带您无忧上云