Petit problème lorsque je désire afficher l'inode d'un fichier :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int			main(int argc, char *argv[])
{
	DIR			*dp;
	struct dirent	*dirp;
 
	if (argc != 2)
	{
		ft_error("USAGE");
	}
	if ((dp = opendir(argv[1])) == NULL)
		ft_error("Can't open");
	while ((dirp = readdir(dp)) != NULL)
	{
		printf("%llu    %s\n", dirp->d_fileno, dirp->d_name);
	}
	closedir(dp);
	exit (0);
}
j'essaye de reproduire un basique ls -i, mais la valeur retournée par mon petit programme ne correspond pas toujours à la valeur renvoyé par ls -i. Notamment pour les dossiers /net, /home et /dev.
J'ai essayé, à titre de comparaison, d'utiliser la valeur de l'inode contenu dans la structure stat de chaque fichier mais les valeurs ne correspondent pas.

résultat ls -i :
848433 cores
301 dev
848435 etc
5 home

résultat a.out :
848433 cores
848434 dev
848435 etc
869200 home


Certaines valeurs (comme /cores) correspondent mais d'autres non. En observant ls -l pour comprendre, j'ai remarqué que la date de modification correspondait à aujourd'hui pour les dossiers avec des valeurs différentes, ce qui voudrait dire que l'inode que je trouve avec mon programme correspond à la dernière date de modification (qui serait la date de création du dossier) mais que le ls -i m'afficherait l'inode correspondant à la création du fichier lors de la "création du système".
Je ne sais pas si je suis assez clair, mais j'aimerais bien comprendre d'ou provient la différence.


Merci