:: Enseignements :: Licence :: L3 :: 2016-2017 :: Programmation système en C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | pipe(), SIGPIPE |
Exercice 1 - Réunion de famille
En utilisant fork(), créer deux processus communiquant par un
tube (lui-même créé avec l'appel système pipe(). Le père lira
depuis l'entrée standard et écrira dans le tube. Le fils lira depuis le
tube et écrira sur la sortie standard en mettant tout en majuscules (en
utilisant la fonction toupper(), par exemple).
Exercice 2 - A death in the family
Reprendre l'exercice précédent. Cette fois, après avoir 10 caractères, le
fils termine son exécution. On souhaite aussi que le père termine lorsque
le fils termine. Plusieurs solutions sont possibles :
-
Utiliser SIGCHLD afin que le père réalise la terminaison
du fils.
-
Fermer soigneusement les descripteurs de fichiers inutilisés (par
exemple, après le fork(), chaque processus ferme la moitié
du tube qu'il n'utilise pas). La prochaine écriture dans le tube
provoquera un SIGPIPE dans le père.
Exercice 3 - Le tube ne sonne qu'une fois
Reprendre l'exercice précédent en utilisant un tube nommé (créé par
mkfifo). Cette fois, il n'y a ni père ni fils, mais deux
processus lancés à partir du shell (ou des shells), un écrivant et
l'autre lisant. Étudier l'ordre dans lequel on doit lancer ces deux
processus selon le mode d'ouverture (lire te man de open).
© Université de Marne-la-Vallée