:: Enseignements :: ESIPE :: E4INFO :: 2014-2015 :: Programmation système en C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | stat() lstat() opendir() readdir() |
Exercice 1 - stat()
En utilisant l'appel système
stat(), écrire un programme affichant le numéro d'inode,
la taille, la date de modification et le type (fichier, répertoire, ou autre) d'un fichier
passé en argument. Inutile de mettre en forme la date de modification : il suffit de l'afficher
en l'état (en secondes depuis le premier janvier 1970). Quant au type, affichez juste "d", "f", ou
"?" pour indiquer un répertoire, un fichier, ou autre chose. Pour connaître le type du fichier,
utilisez les macros
S_ISDIR et autres, sur le champ
st_mode de la structure passée à
stat().
Exercice 2 - lstat()
Modifier le programme précédent pour indiquer si le fichier est un lien (par la lettre "l");
et donner la destination du lien. Pour cela, utiliser l'appel système
lstat() (attention:
stat() suit toujours les liens, et n'indiquera jamais si un fichier est un lien ou pas!
Par ailleurs, si on demande à
stat() de suivre un lien invalide, il renverra une erreur),
et l'appel système
readlink() pour connaître la destination du lien. Bien lire la
manpage de
readlink()...
Exercice 3 - Ma mini-version de ls
En utilisant les fonctions de bibliothèque opendir() et readdir() (attention: il y a deux
fonctions readdir; utilisez celle décrite par la section 3 des pages man), écrire un
programme qui liste le contenu du répertoire courant, en affichant juste le nom de chaque fichier.
N'oubliez pas le closedir() à la fin. Puis, afficher aussi les mêmes informations
qu'à l'exercice précédent (réutiliser le code) - en ajoutant le nom de chaque fichier, bien sûr.
Attention: il faut concaténer le nom du répertoire et le nom du fichier; nous conseillons
l'utilisation de snprintf().
Modifier le programme précédent afin que:
- s'il n'y a pas d'argument, il fonctionne comme le programme précédent
- si le premier argument est un fichier, il fonctionne comme le programme de l'exercice 2
- si le premier argument est un répertoire, il liste le contenu de ce répertoire
- s'il y a plusieurs arguments, il les traite les uns après les autres
Exercice 4 - Surveillance de fichier
En utilisant la date de modification, écrire un programme qui "surveille" un fichier
fourni en argument jusqu'à ce que ce fichier soit modifié. Le programme devra consulter
sans cesse la date de modification (avec
stat()) jusqu'à ce qu'elle change;
puis quitter. On peut utiliser les fonctions
sleep() ou
usleep() entre deux
appels à
stat() afin que le programme ne consomme pas tout le temps CPU. Rappel:
pour modifier un fichier, on peut faire
touch le_fichier, ou encore
echo >> le_fichier par exemple.
Tester le programme avec un répertoire.
Exercice 5 - Question bonus
Modifier le programme de l'exercice 3 afin qu'il puisse utiliser l'argument "
-R" pour fonctionner
de façon récursive, comme
ls. Utiliser
getopt() pour traiter les arguments de la ligne de commande.
© Université de Marne-la-Vallée