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).
Terminer (si nécessaire) la section Co-processus
du TD 5.
Reprendre la question 1. Cette fois, c'est le père qui
écrit (octet par octet, par exemple) et le fils qui lit. Le fils
devra simplement répéter sur la sortie standard ce qu'il
a lu, mais en s'arrêtant au bout de 10 caractères (comme
le programme "head -c10"). Ensuite, 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.
Reprendre la précédente 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, un écrivant et l'autre lisant. Etudier l'ordre dans lequel on doit lancer
ces deux processus selon le mode d'ouverture.