c中的Msgsnd:权限被拒绝

时间:2018-11-18 20:13:42

标签: c message-queue system-calls errno

我正在尝试创建消息队列,然后向其发送消息。这是我尝试过的:

int main(){
    int myMsgQueue;
    struct msgStruct{
        long mtype;
        char mtext[LENGTH];
    };
    struct msgStruct myMsg; 
    myMsg.mtype = (long)getpid();
    strcpy(myMsg.mtext,"Hey there"); //Setting the string of the message

    if((myMsgQueue = msgget(IPC_PRIVATE,IPC_CREAT | IPC_EXCL)) == -1) //Creating the message queue
        errore(__LINE__);
    if(msgsnd(myMsgQueue,&myMsg,sizeof(myMsg) - sizeof(long),0) == -1) //Sending the message
        errore(__LINE__);
    if(msgctl(myMsgQueue,IPC_RMID,0) == -1) //Deleting the message queue
        errore(__LINE__);
}

函数 errore 简单地打印出一个字符串,该字符串使用strerror(errno)来解释错误。
但是,该代码似乎无效:错误在msgsnd返回-1时显示“权限被拒绝”。
我无法弄清楚是什么问题:我正在初始化消息队列和适当的消息结构,然后创建与该进程的pid相对应的类型的消息以及与“ Hey there”相对应的文本,然后发送该消息。
我想念什么?

1 个答案:

答案 0 :(得分:1)

阅读手册页man page

  

参数键存在消息队列标识符,但是操作   由msgflg的低9位指定的权限不会   授予;