C Разрешение запрещено для создания очереди
-
26-09-2019 - |
Вопрос
Я пытаюсь создать очередь, но я получаю разрешение, запрещенную ошибку. Я получил эту ошибку раньше, но затем я добавил код для ошибки, ловит к созданию ключа, и он работал. Единственное, что я изменил с тех пор, я положу свой код создания очереди в отдельной функции. Вот что-то вроде того, как мой код выглядит:
key_t key1;
int msqid1;
int main(int arc, char *argv[])
{
getKeys();
queueCreate();
}
void getKeys()
{
if ((key1 = ftok(".", '1')) == -1)
{
perror("key1 creation");
exit(1);
}
}
void queueCreate()
{
if ((msqid1 = msgget(key1, 0666 | IPC_CREAT)) == -1)
{
perror("msqid1 creation");
exit(1);
}
}
Ошибка ошибки - «MSQID1 Создание: разрешение запрещено». Есть идеи?
Решение
Скорее всего, вы не уничтожили очередь сообщений по одному случаю, это было успешно создано, поэтому теперь вы не можете воссоздать его, потому что он все еще существует.
Вы не указываете, какую платформу вы находитесь. Классически, вы бы использовали ipcs
команда для получения состояния различных систем IPC (общая память, семафоры и очереди сообщений), а также ipcrm
Чтобы удалить системы IPC, которые больше не хотели.
Другие советы
Ваша ошибка кажется EACCES
и не EEXIST
. Отказ Моя страница My Linux говорит:
EACCES Queue сообщений существует для ключа, но процесс вызова не имеет разрешения на доступ к очереди и не имеет возможности CAP_IPC_OWNER.
Вы проверили эти условия?
Вы используете текущий каталог как путь для ftok
. Отказ Может быть, измените в простой локальный файл в «/ TMP», а не в домашней папке (NFS?).