【问题标题】:mq_open err no 13 Permission deniedmq_open errno 13 权限被拒绝
【发布时间】:2016-05-07 17:27:28
【问题描述】:

我在尝试使用 mq_open() 调用创建 posix mq 时遇到权限问题。我确实合并了此处提到的更改mq_open Permission denied 我查看了其他相关帖子,例如https://groups.google.com/forum/#!topic/comp.unix.programmer/hnTZf6aPpbE,但这也指向同一件事。

gcc server_mq.c -lrt -o 服务器

错误编号为 13

天哪,mqd 出了点问题! 权限被拒绝

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <mqueue.h>
#include <errno.h>
#include <string.h>

#include "client_server.h"

#define PATH "/tmp/servermq"

int main(void)
{
    mqd_t mqd;
    mode_t omask;
    omask = umask(0);
    int flags = O_RDWR | O_CREAT | O_EXCL;
    struct mq_attr attr, *attrp;

    attr.mq_maxmsg = 5;
    attr.mq_msgsize = 1024;

    attrp = &attr;

    mqd = mq_open(PATH, flags, S_IRUSR | S_IWUSR | S_IWGRP, attrp);


    if (mqd == (mqd_t)-1)
    {
        printf("error number is %d \n ",errno);
        printf(" Oh dear, something went wrong with mqd ! %s\n", strerror(errno));
    }

    umask(omask);
    mq_close(mqd);
    mq_unlink(PATH);
    return 0;
}

【问题讨论】:

    标签: c linux posix message-queue


    【解决方案1】:

    你不能使用/tmp/servermq 作为你的名字...

    引用 ma​​n mq_overvie

       Message queues are created and opened using mq_open(3);  this  function
       returns  a  message queue descriptor (mqd_t), which is used to refer to
       the open message queue in later calls.  Each message queue  is  identi-
       fied by a name of the form /somename; that is, a null-terminated string
       of up to NAME_MAX (i.e.,  255)  characters  consisting  of  an  initial
       slash,  followed  by one or more characters, none of which are slashes.
    

    此外,您很快就会发现此部分相关:

    挂载消息队列文件系统
    在 Linux 上,消息队列是在虚拟文件系统中创建的。 (其他 实现也可能提供这样的功能,但细节是 可能会有所不同。)这个文件系统可以挂载(由超级用户) 使用以下命令:

               # mkdir /dev/mqueue
               # mount -t mqueue none /dev/mqueue
    
           The sticky bit is automatically enabled on the mount directory.
    

    【讨论】:

    • 谢谢你谢谢你...花了 3 小时调试和在线查找而不是阅读 man :( ...非常感谢帮助!!!
    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2011-06-11
    • 2014-07-15
    • 2015-07-17
    • 2016-07-25
    • 2013-06-12
    • 2013-05-02
    • 2021-05-18
    相关资源
    最近更新 更多