fork()导致msgsnd()无效参数

时间:2020-08-20 09:58:26

标签: c fork ipc

我正在尝试实现一个模拟中国Morra进程之间的程序。我有三个人:两名球员和一名法官。到目前为止,我仍然坚持使用后者,因为在创建子进程时,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,&message,sizeof(message)-sizeof(long),0) == -1){
        perror("error in send");
        exit(1);
    }
   
    printf("sending stuff\n");

    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);
}`

0 个答案:

没有答案