Laboratoire 9 - Traitement des fichiers ouverts
Remarque: n’oubliez pas, lors de l’utilisation d’appels système, de traiter les cas d’erreur.
Redirection de fichiers
-
Développez un programme
redir.c
avec l’usage./redir IN OUT commande [argument...]
. Ce programme permet d’exécuter une commande avec ses arguments, mais en redirigeant l’entrée standard depuis le fichier IN et la sortie standard ainsi que la sortie standard d’erreur vers le fichier OUT. -
Note: Les appels systèmes
dup2
etcreat
peuvent vous être utiles. -
Expliquez le comportement de
./redir /dev/null /dev/tty ls -l /proc/self/fd/
.
Mini tail
Écrivez un programme mini_tail
qui ouvre le fichier qui lui est passé en argument, et attend que de nouvelles lignes arrivent en les affichant le cas échéant. Ce programme est similaire à la commande tail
avec l’option -f
. Pour ce faire, procédez avec les étapes suivantes:
-
Mémorisez la taille du fichier passé en argument,
-
Effectuez une pause d’une seconde
sleep
, -
Vérifiez la nouvelle taille du fichier,
-
Si la taille est égale, on considère que le fichier n’a pas de nouvelle donnée (c’est peut-être faux). Si celle-ci est supérieure, affichez les nouvelles modifications. Si celle-ci est inférieure, affichez un message d’avertissement et réaffichez l’intégralité du fichier.
-
Recommencez les étapes précédentes.
-
Les appels systèmes suivants pourraient vous servir:
stat
,lseek
-
Modifiez le programme
mini_tail
afin qu’il surveille plusieurs fichiers. N’oubliez pas de modifier l’affichage afin d’indiquer le nom du fichier qui a subi la modification. -
Bonus. Reprenez le programme
mini_tail
et modifiez-le afin d’utiliserinotify
. L’utilisation deinotify
avant tout de supprimer l’utilisation dusleep
et d’éviter de devoir revérifier systématiquement la taille de chacun des fichiers.