[C] Connaitre le nombre de liens dur d'un fic

Fermé
Tunisiano87 Messages postés 15 Date d'inscription dimanche 23 novembre 2008 Statut Membre Dernière intervention 13 avril 2010 - 7 févr. 2009 à 18:37
 loupius - 8 févr. 2009 à 01:09
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.
A voir également:

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.
0