Licence mathématiques et informatique 3ème année

TD de programmation système n° 1

pipe(), dup() et dup2()

 
  1. 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.
  2. 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.
  3. 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.
  1. Ecrire les programmes addition, multiplication, soustraction. Utiliser scanf pour lire les nombres, printf pour les afficher (en clair : faire simple, rapide, concis !)
  2. 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.