mq_open创建队列失败
- mq_open创建队列失败
Error creating message queue: Invalid argument
问题:linux中mq_open创建队列失败,提示该问题,怎么解决
原因:队列名(name)问题:
1)POSIX消息队列名必须以/开头。队列名不能包含/作为路径分隔符(除了开头的那个),因为它被视为文件名而不是路径。
2)队列名可能太长或包含非法字符(尽管POSIX标准通常只限制以/开头,但最好避免使用特殊字符)
解决:
#include <stdio.h>
#include <stdlib.h>
#include <mqueue.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
int main() {
const char *mq_name = "/my_queue";
mqd_t mqdes;
struct mq_attr attr;
attr.mq_flags = 0;
attr.mq_maxmsg = 10;
attr.mq_msgsize = 256;
attr.mq_curmsgs = 0; // 这个字段在mq_open时会被忽略
mqdes = mq_open(mq_name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, &attr);
if (mqdes == (mqd_t)-1) {
perror("mq_open failed");
exit(EXIT_FAILURE);
}
printf("Message queue '%s' opened successfully. Descriptor: %ld\n", mq_name, (long)mqdes);
// ... 使用mqdes进行队列操作 ...
mq_close(mqdes);
mq_unlink(mq_name); // 删除队列(可选)
return EXIT_SUCCESS;
}