【发布时间】:2019-10-20 21:26:22
【问题描述】:
我正在通过关注The Linux Programming Interface 创建一个具有以下 sn-p 的消息队列。
if((mq_open("/my_message_queue", O_CREAT, O_RDWR, NULL)) == -1) {
perror("mq creation failed");
}
运行这个 sn-p 我得到一个错误:“权限被拒绝”。我想检查一下我之前是否创建了队列并且没有销毁它,所以我使用了 ipcs。但是,ipcs 不显示任何活动的消息队列。我以前从未在我的开发环境中使用过 POSIX IPC 库(Ubuntu 18.04)。我必须进行一些设置以允许我的用户进程创建消息队列吗?我是否错误地使用了 API?
【问题讨论】:
-
您的 msgqueue 限制可能设置为 0。查看
ulimit和limits.conf。 -
尝试从终端运行
ulimit -q,看看它会输出什么。 -
ulimit -q 返回 819200
-
哦!
"/my_message_queue"。您正在尝试在根目录中创建一个 msgqueue,您不应该对其具有写权限。 -
@ChristianGibbons POSIX 消息队列 (
mq_open()) 名称允许以/开头,/字符的任何其他使用是实现定义的。假设 Linux,在传递给mq_open()的名称中只允许使用前导/字符。