当前位置: 首页 > article >正文

mq_open创建队列失败

  1. 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; 

}


http://www.kler.cn/a/514949.html

相关文章:

  • c++常见设计模式之装饰器模式
  • 如何实现亿级用户在线状态统计?
  • Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
  • CTTSHOW-WEB入门-爆破25-28
  • 【Prometheus】PromQL进阶用法
  • github汉化
  • Flink在流处理中,为什么还会有窗口的概念呢
  • 全球化趋势与中资企业出海背景
  • Spring MVC和Spring WebFlux的区别
  • Linux系统总结
  • 前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释
  • 2.6 createCmd中的builder建造者设计模式
  • 【Maui】提示消息的扩展
  • HTB:Heist[WriteUP]
  • HTML5 History API
  • 校园网上店铺的设计与实现(代码+数据库+LW)
  • enum EPOLL_EVENTS详解
  • 本地仓库管理之分支间的操作
  • MongoDB 创建集合
  • AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型
  • 大语言模型之prompt工程
  • pytest执行报错:found no collectors
  • 单片机基础模块学习——定时器
  • Java菜鸟养成计划(java基础)--java运算符
  • import.meta.globEager详解
  • k8s基础(7)—Kubernetes-Secret