1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#define MAX 50
#define NB_LECTURES 5
int main(int argc,char** argv) {
int tubeVersFils[2],tubeVersPere[2], ind;
pid_t idproc;
char message[MAX], *drapeau;
drapeau = "msg_recu";
pipe(tubeVersFils);
pipe(tubeVersPere);
idproc = fork();
/* Si le fork échoue */
if (idproc == -1) {
fprintf(stderr, "Erreur fork \n");
}
/* Code du père */
else if (idproc != 0) {
/* Fermeture des accès inutiles */
close(tubeVersFils[0]);
close(tubeVersPere[1]);
for (ind = 0; ind < NB_LECTURES; ind++) {
/* Lecture d\'un message sur l\'entrée standard*/
scanf("%s",message);
/* Envoi au fils */
write(tubeVersFils[1], message, sizeof(message));
/* On attends l\'accusé de réception */
read(tubeVersPere[0], drapeau, sizeof(drapeau));
}
wait(NULL);
}
/* Code du fils */
else {
close(tubeVersFils[1]);
close(tubeVersPere[0]);
for (ind = 0; ind < NB_LECTURES; ind++) {
read(tubeVersFils[0], message, sizeof(message));
printf("Fils: message recu: %s \n", message);
write(tubeVersPere[1], drapeau, sizeof(drapeau));
}
}
return 0;
} |
Partager