Up Next

1  Comptons les fichiers comme le shell : lswc

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 :


Exercice 1
 (Analyse du fonctionnement du shell)   Décrivez le fonctionnement du shell lors de l’exécution de la suite de commandes
% ls -1 | wc -l > nfiles
qui explique le résultat de la session suivante :
% ls -1 | wc -l 
      19
% ls nfiles
ls: nfiles: No such file or directory
% ls -1 | wc -l > nfiles
% cat nfiles
      20
à savoir que la valeur 20 et non 19 est produite dans le fichier nfiles

Exercice 2
 (lswc : enchaînement des commandes)   Décrivez les grandes lignes d’une implémentation et donnez le code d’un programme lswc qui exécute la suite de commandes
% ls -1 | wc -l > nfiles
à 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().)

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


Exercice 3
 (Propagation des signaux)   Décrivez le principe d’une implémentation de la redirection des signaux aux processus fils et complétez le code de lswc.

Exercice 4
 (Reprise de l’exécution)   Une fois les processus fils suspendus, que proposez-vous pour que l’utilisateur puisse indiquer qu’il désire reprendre leur exécution. (Il n’est pas demandé d’implémenter cette proposition.)

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.


Exercice 5
 (Terminaison)   Complétez votre implémentation de lswc pour retourner un statut à la manière de ce que fait le shell.

Up Next