Laboratoire 9 - Traitement des fichiers ouverts

Sommaire

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 et creat 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’utiliser inotify. L’utilisation de inotify avant tout de supprimer l’utilisation du sleep et d’éviter de devoir revérifier systématiquement la taille de chacun des fichiers.