2016-01-29 3 views
2

Я работаю с вопросами разрешения при попытке создать posix mq с вызовом mq_open(). Я включил изменение, как упоминалось здесь mq_open Permission denied Я смотрел на другую соответствующую должность, как это https://groups.google.com/forum/#!topic/comp.unix.programmer/hnTZf6aPpbE, но это также указывает на то же самое.mq_open err no 13 Отказано в доступе

Кроме того, при попытке скомпилировать я столкнулся с ошибкой, когда вызовы mq не были идентифицированы и в сети он показывался для компиляции, добавив -lrt в gcc, post, который смог скомпилировать, упомянув об этом, поскольку я не полностью осведомлен о логическом обосновании из него и не понял его, прочитав пост :)

НКУ 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; 
} 

ответ

3

Вы не можете использовать /tmp/servermq как ваше имя ...

Цитирование человек 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. 
+0

поблагодарить у поблагодарить у ... провел 3 часа отладки и смотрел онлайн, а не читал человека: (... очень ценю помощь !!! – oneday

+0

Вы более чем рады –

Смежные вопросы