如何创建 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 访问?的主要内容,如果未能解决你的问题,请参考以下文章