:: Enseignements :: Licence :: L3 :: 2016-2017 :: Programmation système en C ::
[LOGO]

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).