#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().