C队列创建权限被拒绝

时间:2010-11-19 05:32:24

标签: c message-queue permission-denied

我正在尝试创建一个队列,但我收到了一个拒绝权限错误。我之前收到此错误,但后来我添加了代码,用于创建密钥错误,并且它正在运行。从那以后我唯一改变的是我将队列创建代码放在一个单独的函数中。这就像我的代码一样:

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创建:权限被拒绝”。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

很可能你没有在成功创建消息队列的情况下销毁它,所以现在你无法重新创建它,因为它仍然存在。

您没有指明您所在的平台。传统上,您使用ipcs命令获取各种IPC系统(共享内存,信号量和消息队列)的状态,并ipcrm删除不再需要的IPC系统。< / p>

答案 1 :(得分:0)

您的错误似乎是EACCES而不是EEXIST。我的linux手册页说:

  

EACCES密钥存在消息队列,但调用进程确实存在   没有访问队列的权限,并且没有   CAP_IPC_OWNER功能。

您是否检查过这些情况?

您正在使用当前目录作为ftok的路径。也许更改为“/ tmp”中的普通本地文件而不是您的主文件夹(nfs?)。