:: Enseignements :: Licence :: L3 :: 2016-2017 :: Programmation système en C ::
| pipe(), dup() et dup2() |
Exercice 1 - Tentative de détournement, à mains nues
Écrire 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.
Exercice 2 - Tentative de détournement, à la fourchette
-
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 (man bash).
-
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.
Exercice 3 - A-La, A-La-Queue-Leu-Leu
- Ecrire un programme qui prend en argument deux noms de commandes. Il
doit ensuite organiser un "pipe" de ces deux commandes, la sortie
de la première alimentant l'entrée de la seconde.
exemple : ./queueleuleu ls more lance un ls, dont la sortie
alimente le more.
Exercice 4 - Arithmétique d'école primaire, en version distribuée
Dans cet exercice, on appelle co-processus 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
dispatch, qui doit
effectuer des opérations en utilisant les co-processus.
-
Écrire les programmes addition, multiplication,
soustraction. Utiliser scanf pour lire les nombres,
printf pour les afficher (en clair: faire simple, rapide,
concis)
-
Écrire 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, lui envoyer l'ordre, puis afficher le
résultat.
© Université de Marne-la-Vallée