fork () вызывает недопустимый аргумент msgsnd()

#c #fork #ipc

#c #fork #ipc

Вопрос:

Я пытаюсь внедрить программу, которая имитирует китайские процессы Morra beetween. У меня их трое: два Игрока и Судья. На данный момент я придерживаюсь последнего, потому что при создании дочернего процесса fork() происходит сбой простой msgsnd() причины, показывающей Invalid Argument . Чего я здесь не понимаю?

 #define DIM_MSG 1024

#define SEND_REQUEST 1

typedef struct {
    long mtype;
    char mtext[DIM_MSG];
} msg;

void judge(int queue){
    
    msg message;
    
    strcpy(message.mtext,"request");
   message.mtype = 1;

    if(msgsnd(queue,amp;message,sizeof(message)-sizeof(long),0) == -1){
        perror("error in send");
        exit(1);
    }
   
    printf("sending stuffn");

    exit(0);
}

int main(int argc,char **argv){
    int sd_queue;
    
    key_t key = 40;
  
    if((sd_queue = msgget(key,IPC_CREAT | 0666)) == -1){
        perror("msgget");
        exit(1);
    }
     pid_t pid;

     pid = fork();
    if(pid == 0){
        judge(sd_queue);
    }
    
    msgctl(sd_queue,IPC_RMID,NULL);
}`
  

Комментарии:

1. Это не потому, что родительский процесс удалил очередь?

2. Вы правы, я забыл поместить вызов waitpid() прямо перед msgctl().