Ecrire un programme qui redirige la sortie standard vers un fichier, puis
effectue un "ls" vers ce fichier. Il faut donc ouvrir ce fichier
avec open(), puis utiliser dup2() afin que les accès
ultérieurs à la sortie standard se fassent sur le fichier.
Ensuite, on peut faire un execlp() pour lancer ls, et
l'affichage se fera vers le fichier.
Révisions sur fork() (car fork est prérequis
pour ce TD!) : écrire un programme qui exécute le programme
spécifié sur la ligne de commande, et en fonction de son
code
de retour, affiche "OK" ou "ERREUR". Rappels : pour récupérer
le code de retour, utiliser waitpid() ; et OK correspond à
un code de retour nul. Exemple : programme [ "toto" = "titi" ]
doit afficher ERREUR. N'hésitez pas à consulter
la manpage de la commande [, c'est instructif.
Modifier le programme précédent pour qu'il n'affiche rien
d'autre que OK ou ERREUR, c'est-à-dire que le programme qui sert de
"condition" ne doit rien afficher.
Pour l'empêcher de faire de l'affichage, on propose de rediriger la
sortie vers le fichier /dev/null.
Attention! il ne faut pas faire un simple exec mais un
fork+exec.
Attention aussi à ne détourner la sortie standard que
dans le fils, afin que le père puisse encore afficher OK ou ERREUR
à la fin du programme.
Co-processus
Ici, on appelle co-processus[1] un programme
lancé par un autre programme, et contrôlé par ce dernier
par l'intermédiaire de ses entrée et sortie standards. On
veut ici écrire un programme dispatch, et des programmes
addition,
multiplication, soustraction (par exemple). Lorsqu'on
lance addition, ce programme attend 2 nombres sur son entrée
standard, séparés par des '\n', et renvoie leur
somme sur la sortie standard, puis il attend à nouveau deux nombres.
Ensuite, on lance le dispatch, qui doit effectuer des opérations
en utilisant les co-processus.
Ecrire les programmes addition, multiplication, soustraction. Utiliser
scanf
pour lire les nombres, printf pour les afficher (en clair : faire
simple, rapide, concis !)
Ecrire le programme dispatch, qui doit commencer par lancer les co-processus,
puis attend sur l'entrée standard un ordre du style "addition
2 4". Avec strcmp, trouver quel est le co-processus à
utiliser, et lui envoyer l'ordre. Afficher le résultat.
[1] On retrouve cette terminologie dans ksh,
entre autres.