Frage

Ich verstehe, dass ein Verzeichnis nur eine Datei in Unix ist, der die Inode-Nummern und Namen der Dateien innerhalb enthält. Wie nehme ich einen Blick auf das? Ich kann nicht verwenden, Katze oder weniger auf einem Verzeichnis, und Öffnungs es in vi zeigt mir nur eine Auflistung der Dateien ... keine Inode-Nummern.

War es hilfreich?

Lösung

Da dies eine Programmierung Frage ist (es ist eine Programmierung Frage, nicht wahr?), Sollten Sie die opendir Check-out, readdir und closedir Funktionen. Diese sind Teil der Single UNIX Spec.

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

Die dirent.h Datei, um die Struktur, die Sie benötigen haben sollte, mit mindestens:

char   d_name[]    name of entry
ino_t  d_ino       file serial number

Siehe hier für die readdir manpage - es enthält Links zu die andere.

Beachten Sie, dass die Menge an Informationen über eine Datei in den Verzeichniseinträgen für sie gespeichert ist minimal. Die Inode selbst enthält das Material, das Sie aus der stat Funktion bekommen, Dinge wie Zeiten, Größe, Eigentümer, Berechtigungen und so weiter, zusammen mit den all-wichtigen Hinweisen auf den tatsächlichen Dateiinhalt.

Andere Tipps

In den alten Tagen - Version 7, System III, frühes System V - man könnte in die Tat ein Verzeichnis öffnen und den Inhalt in den Speicher, vor allem für das alte Unix-Dateisystem mit 2-Byte-Inode-Nummern und eine Grenze von 14 Byte gelesen auf den Dateinamen.

Als exotische Dateisysteme häufiger geworden, die opendir (), readdir (), closedir () -Familie von Funktionsaufrufen, Anspielstationen verwendet werden, da der Inhalt eines Verzeichnisses Parsen wurde zunehmend nicht-trivial.

Schließlich ist in den letzten zehn Jahren oder so, hat er den Punkt erreicht, an dem auf den meisten Systemen Sie das Verzeichnis nicht lesen können; Sie können es öffnen (in erster Linie so Operationen wie fchdir () arbeiten können), und Sie können die opendir () -Familie von Anrufen, es zu lesen verwenden.

Es sieht aus wie der stat Befehl könnte in Ordnung sein. Aus dem Artikel:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top