Reconnaître que deux noms correspondent au même fichier

Problème

Vous voulez tester si deux noms de fichiers correspondent au même fichier.

Solution

Utilisez stat() et comparez les numéros d’inode.

Discussion

Comme décrit dans la recette "Créer un lien symbolique", il est possible de créer plusieurs entrées dans plusieurs répertoires pour un même fichier, entrées appelées liens. Le seul moyen de constater que plusieurs fichiers ne sont en réalité que des liens vers le même fichier est de comparer leur numéro d’inode que vous pouvez obtenir avec stat(). Voici comment tester :


int 
are_files_the_same_file (const char *file1, const char *file2) 
{ 
  struct stat buf; 
  ino_t inode1, inode2; 
  if (stat (file1, &buf)) return (-1); 
  inode1 = buf.st_ino; 
  if (stat (file2, &buf)) return (-1); 
  inode2 = buf.st_ino; 
  if (inode1 == inode2) return (0); 
  return (1); 
}
 

Cette fonction renvoie 0 si les deux fichiers sont identiques et 1 s’ils sont différents. Elle renvoie -1 en cas d’erreur. Dans le cas d’une recherche des fichiers ayant le même numéro d’inode, il est préférable de déterminer le numéro de l’inode en question et d’utiliser une fonction comme celle-ci :


int 
has_file_given_inode (const char *file, ino_t inode) 
{ 
  struct stat buf; 
  if (stat (file, &buf)) return...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Obtenir le répertoire courant
Suivant
Introduction