如何创建 POSIX 共享消息队列而不将其创建为仅作为 root 访问?

Posted

技术标签:

【中文标题】如何创建 POSIX 共享消息队列而不将其创建为仅作为 root 访问?【英文标题】:How can I create a POSIX shared message queue without it created as root access only? 【发布时间】:2019-10-21 05:51:44 【问题描述】:

我正在使用 POSIX mqueue API 创建一个消息队列:

    mq_open("/myqueue", O_CREAT | O_WRONLY, O_WRONLY, NULL)

我还挂载了消息队列对象的目录:

su
mkdir /dev/mqueue
mount -t mqueue none /dev/mqueue
exit

当我运行我的程序时,消息队列出现在 /dev/mqueue 中,具有权限:

---------x

我无法与此消息队列交互,并且它没有通过 ipcs 命令显示。

如何在 Ubuntu 18.04 中创建供用户级应用程序使用的 POSIX 消息队列?

【问题讨论】:

Permission denied when trying to create message queue using POSIX Message Queues的可能重复 【参考方案1】:

你对函数的参数是错误的。您将 O_WRONLY 作为 mode 传递,但它是一个标志,就像另一个 O_* 一样。相反,您应该这样做:

mq_open("/myqueue", O_CREAT | O_WRONLY, 0600, NULL);

或您想要的其他文件访问模式 (0600 = rw-------)。

【讨论】:

以上是关于如何创建 POSIX 共享消息队列而不将其创建为仅作为 root 访问?的主要内容,如果未能解决你的问题,请参考以下文章

设置自定义异常的消息而不将其传递给基本构造函数

测试 WPF 控件而不将其添加到窗口

如何直接在云端上传图片而不将其存储到本地目录中?

如何为页面创建 facebook 事件而不将其发布到页面墙上?

如何自动将用户信息传递给 Bot Framework 对话实例,而不将其作为显式消息发布在聊天窗口中?

如何访问对象而不将其作为参数传递?