[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
loupius - 8 févr. 2009 à 01:09
A voir également:
- [C] Connaitre le nombre de liens dur d'un fic
- Cloner disque dur - Guide
- Defragmenter disque dur - Guide
- Chkdsk disque dur externe - Guide
- Créer un lien pour partager des photos - Guide
- Remplacer disque dur par ssd - 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.