On désire écrire un programme lswc qui exécute la suite de commandes :
% ls -1 | wc -l > nfiles
comme le ferait un shell.
Dans cette suite de commandes :
qui explique le résultat de la session suivante :% ls -1 | wc -l > nfiles
à savoir que la valeur 20 et non 19 est produite dans le fichier nfiles% ls -1 | wc -l 19 % ls nfiles ls: nfiles: No such file or directory % ls -1 | wc -l > nfiles % cat nfiles 20
à la manière du shell. Dans un premier temps, on ne se souciera pas du statut retourné par lswc. (On s’interdira bien entendu d’utiliser un appel à la fonction system().)% ls -1 | wc -l > nfiles
Comme le fait le shell, nous désirons que notre implémentation de lswc propage aux processus fils les signaux issus de la saisie au clavier des caractères <intr> (control-C), et <susp> (control-Z).
Lors de l’exécution d’une suite de commandes liées par des tubes, le statut retourné par le shell est celui de la dernière commande. Dans le cas ou une des commandes se termine anormalement (par exemple suite à la réception d’un signal), ou dans d’autres cas d’erreur, la suite de commandes retourne un statut d’erreur.