Comment puis-je lire un répertoire comme un fichier sous Unix?
Question
Je comprends qu'un répertoire est juste un fichier unix qui contient les numéros d'inodes et les noms des fichiers dans. Comment puis-je jeter un oeil à ce sujet? Je ne peux pas utiliser le chat ou moins sur un répertoire, et l'ouverture en vi me montre juste une liste des fichiers ... aucun numéro inode.
La solution
Comme il est une question de programmation (il est une question de programmation, non?), Vous devriez vérifier les fonctions opendir
, readdir
et closedir
. Ceux-ci font partie de la spécification UNIX unique.
#include <sys/types.h>
#include <dirent.h>
DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);
Le fichier dirent.h
doit avoir la structure dont vous avez besoin, contenant au moins:
char d_name[] name of entry
ino_t d_ino file serial number
Voir pour la readdir
manpage - il contient des liens vers les autres.
Gardez à l'esprit que la quantité d'informations sur un fichier stocké dans les entrées d'annuaire pour elle est minime. Le inode contient lui-même les choses que vous obtenez de la fonction stat
, des choses comme les temps, la taille, le propriétaire, autorisations, etc., ainsi que les pointeurs tous importants pour le contenu réel du fichier.
Autres conseils
Dans l'ancien temps - version 7, système III, au début de System V - vous pouvez en effet ouvrir un répertoire et lire le contenu en mémoire, en particulier pour l'ancien système de fichiers Unix avec des numéros inode 2 octets et une limite de 14 octets sur le nom du fichier.
Les systèmes de fichiers plus exotiques sont devenus plus fréquents, le opendir (), readdir (), famille closedir () des appels de fonction devait être utilisé à la place parce que l'analyse du contenu d'un répertoire est devenu. De plus en plus non négligeable
Enfin, dans la dernière décennie, il a atteint le point où la plupart des systèmes, vous ne pouvez pas lire le répertoire; vous pouvez l'ouvrir (surtout si des opérations telles que fchdir () peuvent travailler), et vous pouvez utiliser la famille opendir () des appels pour le lire.
Il ressemble à la commande stat
pourrait être dans l'ordre. De l'article:
stat /etc/passwd
File: `/etc/passwd'
Size: 2911 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 324438 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-08-11 05:24:17.000000000 -0400
Modify: 2008-08-03 05:11:05.000000000 -0400
Change: 2008-08-03 05:11:05.000000000 -0400