Ich habe mich gefragt, warum od(1) unter UNIX funktionierte, aber nicht unter GNU/Linux. Es gibt eine nette Antwort aufServerfehler. Die nächste Frage lautet: Kennen Sie Tools, die das OD-Verhalten emulieren können, um das Dumping von Verzeichnisdaten in GNU/Linux zu unterstützen?
Antwort1
Linux lässt kein einfaches Skript zu read(dir_name, buffer, sizeof(buffer)
– es gibt immer -1 zurück und fügt EISDIR ein errno
. Das ist wahrscheinlich vernünftig, da nicht alle Dateisysteme Verzeichnisse als Dateien haben. Das häufig verwendete Reiserfs hat dies beispielsweise nicht.
Sie können den open()
Systemaufruf eines C-Programms verwenden, um einen Dateideskriptor eines Verzeichnisses abzurufen, aber Dinge wie readdir(3)
(von libc) rufen getdents(2)
tatsächlich Verzeichniseinträge ab. In jeder Dateisystemimplementierung gibt es wahrscheinlich Code, um struct linux_dirent
aus dem, was das Dateisystem zum Speichern von Verzeichniseinträgen verwendet (eine Datei, eine Datenbank, ein B-Baum auf der Festplatte), etwas zu erstellen.