如何在linux系统中使用mqueue
时间: 2024-03-10 18:47:37 浏览: 18
在 Linux 系统中,可以使用 POSIX 消息队列来实现进程间通信。下面是一个简单的使用 POSIX 消息队列的示例程序:
1. 创建消息队列:可以使用 mq_open 函数来创建一个消息队列。在创建消息队列时,需要指定一个唯一的消息队列名称,以及消息队列的属性,例如消息队列的最大消息数、每个消息的最大字节数等等。
```c
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
int main(int argc, char **argv)
{
mqd_t mq;
struct mq_attr attr;
attr.mq_flags = 0;
attr.mq_maxmsg = 10;
attr.mq_msgsize = 1024;
attr.mq_curmsgs = 0;
mq = mq_open("/test_queue", O_CREAT | O_RDWR, 0644, &attr);
if (mq == -1) {
perror("mq_open");
return -1;
}
mq_close(mq);
return 0;
}
```
2. 发送消息到消息队列:可以使用 mq_send 函数来向消息队列发送消息。在发送消息时,需要指定消息队列的名称、消息的内容、消息的长度以及优先级等信息。
```c
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
int main(int argc, char **argv)
{
mqd_t mq;
char msg[] = "hello world";
int ret;
mq = mq_open("/test_queue", O_RDWR);
if (mq == -1) {
perror("mq_open");
return -1;
}
ret = mq_send(mq, msg, sizeof(msg), 0);
if (ret == -1) {
perror("mq_send");
mq_close(mq);
return -1;
}
mq_close(mq);
return 0;
}
```
3. 接收消息从消息队列:可以使用 mq_receive 函数来从消息队列中接收消息。在接收消息时,需要指定消息队列的名称、消息缓冲区、消息缓冲区的长度以及优先级等信息。
```c
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
int main(int argc, char **argv)
{
mqd_t mq;
char buf[1024];
int prio, len, ret;
mq = mq_open("/test_queue", O_RDWR);
if (mq == -1) {
perror("mq_open");
return -1;
}
ret = mq_receive(mq, buf, sizeof(buf), &prio);
if (ret == -1) {
perror("mq_receive");
mq_close(mq);
return -1;
}
printf("received message: %s\n", buf);
mq_close(mq);
return 0;
}
```
4. 删除消息队列:可以使用 mq_unlink 函数来删除一个已经存在的消息队列。
```c
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
int main(int argc, char **argv)
{
mq_unlink("/test_queue");
return 0;
}
```