我正在尝试实现一个模拟中国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);
}`