创建一个消息队列,用于存放任务间传递的数据。此时队列传递消息的类型为UINT32,对应某个整数。接收任务中,需要使用printf打印出该整数的值。
时间: 2024-05-01 20:16:03 浏览: 141
这里提供一个使用C语言中POSIX消息队列的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
#define QUEUE_NAME "/my_queue"
#define MAX_MSG_SIZE 256
#define MAX_MSG_NUM 10
#define MSG_VALUE 123
int main()
{
mqd_t mq;
struct mq_attr attr;
char buffer[MAX_MSG_SIZE + 1];
// 设置消息队列属性
attr.mq_flags = 0;
attr.mq_maxmsg = MAX_MSG_NUM;
attr.mq_msgsize = sizeof(uint32_t);
attr.mq_curmsgs = 0;
// 创建消息队列
mq = mq_open(QUEUE_NAME, O_CREAT | O_RDWR, 0666, &attr);
if (mq == (mqd_t)-1)
{
perror("mq_open");
exit(1);
}
// 发送一条消息到队列
uint32_t msg = MSG_VALUE;
if (mq_send(mq, (const char *)&msg, sizeof(uint32_t), 0) == -1)
{
perror("mq_send");
exit(1);
}
// 从队列中读取消息并打印
ssize_t bytes_read;
bytes_read = mq_receive(mq, (char *)&msg, sizeof(uint32_t), NULL);
if (bytes_read == -1)
{
perror("mq_receive");
exit(1);
}
printf("Received message: %u\n", msg);
// 关闭并删除消息队列
mq_close(mq);
mq_unlink(QUEUE_NAME);
return 0;
}
```
这个例子中创建了一个名为 `/my_queue` 的消息队列,每个消息的大小为 `sizeof(uint32_t)`,最大消息数量为 `MAX_MSG_NUM`。发送任务将整数 `MSG_VALUE` 发送到队列中,接收任务从队列中读取一个整数并打印出来。需要注意的是,POSIX消息队列在使用时需要先指定其属性,这里使用 `struct mq_attr` 结构体来设置消息队列的属性。
阅读全文