J'ai travaillé plus sur les tuyaux et je me demandais s'il y avait un moyen de lire et d'écrire dans le même processus en utilisant le tuyau. Voici mon code:Communication par tuyaux en C
// Creates 2 pipes per child
for (i=0; i<atoi(argv[1]); i++) {
pipe(fd[i]);
}
for(i = 0; i < atoi(argv[1]); i++) {
pid = fork();
//pipe(fd);
int r[2];
int check=0;
srand(getpid());
int** Board=build_board(width);
if(pid < 0) {
printf("Error");
exit(1);
} else if (pid == 0) {
printf("Child (%d): %d\n", i + 1, getpid());
// srand(getpid());
makeMove(Board, 2,r);
printf("Child R: %d:%d\n", r[0],r[1]);
display(Board, width, width);
close(fd[i][0]);
write(fd[i][1], r, sizeof(r));
// play(Board);
exit(0);
} else {
printf("Parent (%d): %d\n", i + 1, getpid());
while (1) {
if (check==0) {
close(fd[i][1]);
read(fd[i][0], readbuffer, sizeof(readbuffer));
printf("Received string: %d:%d\n", readbuffer[0], readbuffer[1]);
Board[readbuffer[0]][readbuffer[1]]=2;
puts("Fixed Board");
display(Board, width, width);
check=checkVictory(Board);
if (check!=0) {
puts("Winner");
display(Board, width, width);
break;
}
//srand(getpid());
AI_move(Board,1,2);
display(Board, width, width);
}
}
wait(NULL);
}
}
Je suis en train d'envoyer des va et vient entre les deux processus, mais avec le code que j'ai-je obtenir le premier pas de l'enfant, le parent se déplace juste jusqu'à ce qu'il gagne. Je crois qu'après le déménagement du parent, je dois réécrire à l'enfant, mais je ferme cette capacité au sommet du processus de l'enfant. Comment et je communique les uns avec les autres jusqu'à ce qu'un gagnant soit trouvé et quand on sortira.
Voici quelques exemple de sortie:
Parent (1): 17291
Child (1): 17293
Child laced peice at: 7,3
Child R: 7:3
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - - - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - - - -
Parent placed peice at: 7,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - R - -
Parent placed peice at: 6,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B - R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B - R - -
Parent placed peice at: 7,4
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B R R - -
Parent placed peice at: 7,0
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - - B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - - B R R - -
Parent placed peice at: 7,2
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - R B R R - -
Parent placed peice at: 6,2
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - R - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - R - - R - -
R - R B R R - -
Parent placed peice at: 5,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Parent placed peice at: 4,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Winner
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
N'utilisez pas atoi (argv [1]) 'comme boucle liée; utilisez 'int num = atoi (argv [1]);' puis utilisez 'num' comme limite dans les boucles. –
Merci, je le sais, mais ce n'est que le tester pour le produit final, je voudrais m'assurer que l'entrée était un nombre entier en premier. alors nous comme vous l'avez suggéré. – jg943
Je suis confus sur le rôle de 'argv [1]'. Si cela ne peut être que 2, pourquoi est-ce un argument? Si ce n'est pas limité à 2, cela signifie que vous avez beaucoup d'enfants. Le jeu est-il fait par deux processus enfants, ou entre le parent et un enfant? –