le_pid_A = getpid()
si le_pid_B = fork() == -1
affiche "Erreur dans fork()"
sortie
sinon si le_pid_B == 0
affiche "Debut du fils B"
ferme le_tube[SORTIE] )
si echoue l_entree = ouvre le_tube[ENTREE] en mode ecriture
affiche "Erreur dans fdopen()"
emet au processus A le signal SIGKILL
emet au processus B le signal SIGKILL
fin de si echoue
affiche "Fils B : debut de l'attente"
traite_le_B()
fin de si
attendre la mise en place de la fourche
si le_pid_C = fork() == -1
affiche "Erreur dans fork()"
emet au processus B le signal SIGKILL
sortie
sinon si le_pid_C == 0
affiche "Debut du fils C"
ferme le_tube[ENTREE]
si echoue la_sortie = ouvre le_tube[SORTIE] en mode lecture
affiche "Erreur dans fdopen()"
emet au processus A le signal SIGKILL
emet au processus B le signal SIGKILL
emet au processus C le signal SIGKILL
fin de si echoue
affiche "Fils C : debut de l'attente"
traite_le_C()
fin de si
attendre la mise en place de la fourche
affiche "Le pere A : debut des echanges ..."
traite_le_A()
fin
*/
/* exemple d'execution
[root@localhost /root]# egcs -o/bin/pp /usr/src/cours/devoir2/dev2ex2/projet/pp.c
[root@localhost /root]# pp
Debut du fils B
Fils B : debut de l'attente
Debut du fils C
Fils C : debut de l'attente
Le pere A : debut des echanges ...
Le pere A : signal envoye : SIGUSR1 (autorisation tache B)
Le fils B : message a envoyer :exercice AA1254ww
Le fils B : ecriture et envoie du message
Le fils B : envoie au pere A de SIGUSR1
Le pere A : signal recu : SIGUSR1 (fin de la tache precedente)
Le pere A : signal envoye : SIGUSR1 (autorisation tache C)
Le fils C : signal recu : SIGUSR1
Le fils C : message recu : EXERCICE AA1254WW
Le fils C : envoie au pere A de SIGUSR1
Le pere A : signal recu : SIGUSR1 (fin de la tache precedente)
Le pere A : signal envoye : SIGUSR1 (autorisation tache B)
Le fils B : message a envoyer :
Le fils B : ecriture et envoie du message
Le fils B : envoie au pere A de SIGUSR1
Le pere A : signal recu : SIGUSR1 (fin de la tache precedente)
Le pere A : signal envoye : SIGUSR1 (autorisation tache C)
Le fils C : signal recu : SIGUSR1
Le fils C : message recu : PAS DE MESSAGE
Le fils C : envoie au pere A de SIGUSR1
Le pere A : signal recu : SIGUSR1 (fin de la tache precedente)
Le pere A : signal envoye : SIGUSR1 (autorisation tache B)
Le fils B : message a envoyer : '\n'
Le fils B : ecriture et envoie du message
Le fils B : envoie au pere A de SIGUSR1
Le pere A : signal recu : SIGUSR1 (fin de la tache precedente)
Le pere A : signal envoye : SIGUSR1 (autorisation tache C)
Le fils C : signal recu : SIGUSR1
Le fils C : message recu : PAS DE MESSAGE
Le fils C : envoie au pere A de SIGUSR1
Le pere A : signal recu : SIGUSR1 (fin de la tache precedente)
Le pere A : signal envoye : SIGUSR1 (autorisation tache B)
Le fils B : message a envoyer :sdgfsdg