0

我正在尝试创建一个队列,但出现权限被拒绝错误。我之前遇到过这个错误,但后来我添加了用于捕获密钥创建错误的代码并且它正在工作。从那以后我唯一改变的是我将队列创建代码放在一个单独的函数中。这是我的代码的样子:

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

4

2 回答 2

3

很可能您在成功创建消息队列时没有销毁它,因此现在您无法重新创建它,因为它仍然存在。

你没有指出你在哪个平台上。传统上,您将使用该ipcs命令来获取各种 IPC 系统(共享内存、信号量和消息队列)的状态,并ipcrm删除不再需要的 IPC 系统。

于 2010-11-19T06:17:15.420 回答
0

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

EACCES key 存在消息队列,但调用进程无权访问该队列,也没有 CAP_IPC_OWNER 能力。

你检查过这些条件吗?

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

于 2010-11-19T07:25:17.610 回答