Quand un pipe est ouvert, et que le descripteur associé à un bout d'écriture (desc[1]
) reste ouvert dans un processus, le système attendra que ce processus ferme ce descripteur (après y avoir éventuellement écrit), pour signifier qu'il a fini d'y écrire.
Conséquence: Quand on créé des processus fils, ou qu'on duplique des descripteurs, il faut fermer systématiquement tous ceux qu'on n'utilise pas dans le processus courant.
En TP, sur certaines machines, pour l'exercice 3, les deux pipes p
et q
étaient créés dès l'entrée dans le programme principal (pipe(p); pipe(q);
). Or, seul le pipe p
a été fermé ensuite dans le programme principal, ce qui fait que le système est toujours en attente d'écriture sur q[1]
(d'où la non terminaison constatée chez certains).
Il faut soit fermer explicitement le pipe q
(utilisé pour la communication entre le fils et le petit-fils) dans le programme principal (père), ou créer ce pipe seulement dans le fils.
Pour rappel, en TP, on avait deux pipes p
et q
, et tr