我正在使用以下代码片段创建一个消息队列Linux 编程接口 http://man7.org/tlpi/.
if((mq_open("/my_message_queue", O_CREAT, O_RDWR, NULL)) == -1) {
perror("mq creation failed");
}
运行此代码片段时出现错误:“权限被拒绝”。我想检查一下我之前是否创建了队列并且没有销毁它,所以我使用了 ipcs。但是,ipcs 不显示任何活动消息队列。我以前从未在我的开发环境(Ubuntu 18.04)中使用过 POSIX IPC 库。我是否必须进行一些设置才能允许我的用户进程创建消息队列?我是否错误地使用了 API?
From 手册页 http://man7.org/linux/man-pages/man3/mq_open.3.html:
oflag 参数指定控制调用操作的标志。 (标志值的定义可以通过包括<fcntl.h>
.) 必须在 oflag 中准确指定以下其中一项:
O_RDONLY 打开队列仅接收消息。
O_WRONLY 打开队列仅发送消息。
O_RDWR 打开队列以发送和接收消息。
您的代码中没有这三个值。或者更确切地说,你这样做,但它是在mode
论证,而不是oflag
一,其中对应的数字具有完全不同的含义。第三个参数是创建队列时使用的文件系统权限位(就像第三个参数一样)open()
创建新文件时),而不是打开队列的模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)