Я пытаюсь создать очередь сообщений и затем отправить ей сообщение. Вот что я попробовал:
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).
Однако код, похоже, не работает: errore печатает «Отказано в доступе», так как msgsnd возвращает -1.
Я не могу понять, в чем проблема: я инициализирую очередь сообщений и адекватную структуру сообщения, затем создаю сообщение типа, соответствующего pid процесса и текста, соответствующего «Привет!», И затем отправляю сообщение.
Чего мне не хватает?