[C] Connaitre le nombre de liens dur d'un fic
Tunisiano87
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
loupius -
loupius -
Bonjour,
Y a-t-il une fonction C qui nous permet de connaitre le nombre de liens durs d'un fichier ?
En fait j'ai besoin d'ecrire un pgm qui calcule la taille des fichiers contenus dans un repertoire de maniere recursive mais en ne comptabilisant qu'une seule fois chaque fichier quelque soit le nombre de ses liens durs.
Merci pour votre réponse.
Y a-t-il une fonction C qui nous permet de connaitre le nombre de liens durs d'un fichier ?
En fait j'ai besoin d'ecrire un pgm qui calcule la taille des fichiers contenus dans un repertoire de maniere recursive mais en ne comptabilisant qu'une seule fois chaque fichier quelque soit le nombre de ses liens durs.
Merci pour votre réponse.
A voir également:
- [C] Connaitre le nombre de liens dur d'un fic
- Cloner disque dur - Guide
- Defragmenter disque dur - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Créer un lien pour partager des photos - Guide
- Chkdsk disque dur externe - Guide
1 réponse
Bien que non précisé, je considère qu'il s'agit de C sous Linux (pour les autres OS, je ne sais pas!).
A ma connaissance il n'est pas possible de réaliser directement ce que tu demandes; toutefois je vais te donner une méthode pour y arriver.
Il faut bien comprendre que le lien en dur dont tu parles permet d'avoir plusieurs noms pour un même fichier. Une fois créés ces noms n'ont pas de hiérarchie entre eux, c'est-à-dire que rien ne permet de les différencier vis à vis du fichier. Alors comment faire? Parmi les multiples infos décrivant un fichier, il en est une qui est unique, c'est le n° d'inode... et la solution se trouve là:
- lorsque que tu as la liste de tous les fichiers du répertoire, tu appliques la fonction int stat (const char* nomFichier, struct stat* infos) et dans la structure il y a un membre st_ino qui te donnes le n° d'inode,
- si le n° d'inode n'est pas trouvé dans une liste, tu ajouteras la taille du fichier contenue dans st_size,
- tu ajouteras le n° d'inode dans la liste.
Voilà c'est moins simple que tu le pensais mais c'est possible.
Il ne faudra pas oublier d'écarter les fichiers spéciaux par interprétation de st_mode.
A ma connaissance il n'est pas possible de réaliser directement ce que tu demandes; toutefois je vais te donner une méthode pour y arriver.
Il faut bien comprendre que le lien en dur dont tu parles permet d'avoir plusieurs noms pour un même fichier. Une fois créés ces noms n'ont pas de hiérarchie entre eux, c'est-à-dire que rien ne permet de les différencier vis à vis du fichier. Alors comment faire? Parmi les multiples infos décrivant un fichier, il en est une qui est unique, c'est le n° d'inode... et la solution se trouve là:
- lorsque que tu as la liste de tous les fichiers du répertoire, tu appliques la fonction int stat (const char* nomFichier, struct stat* infos) et dans la structure il y a un membre st_ino qui te donnes le n° d'inode,
- si le n° d'inode n'est pas trouvé dans une liste, tu ajouteras la taille du fichier contenue dans st_size,
- tu ajouteras le n° d'inode dans la liste.
Voilà c'est moins simple que tu le pensais mais c'est possible.
Il ne faudra pas oublier d'écarter les fichiers spéciaux par interprétation de st_mode.