Jeder Dateisystemtyp speichert Verzeichnisse auf unterschiedliche Weise. Es gibt viele verschiedene Dateisystemtypen mit unterschiedlichen Eigenschaften – gut für hohen Durchsatz, gut für hohe Parallelität, gut für Umgebungen mit begrenztem Speicher, verschiedene Kompromisse zwischen Lese- und Schreibleistung, zwischen Komplexität und Stabilität usw. Ihr Buch beschreibt ein Dateisystem, das früher verwendet wurde Unix-Systeme. Moderne Systeme unterstützen viele verschiedene Dateisysteme.
Die sehr frühen Versionen von Unix hatten viele Dateisystemmanipulationen außerhalb des Kernels. Beispiel:mkdir
und rmdir
funktionierte, indem einige Dateisystem-Datenstrukturen direkt bearbeitet wurden. Diese wurde schnell durch eine einheitliche Verzeichniszugriffsschnittstelle, die opendir
, ersetzt /readdir
/closedir
Familie, die es Anwendungen ermöglichte, Verzeichnisse zu manipulieren, ohne wissen zu müssen, wie sie unter der Haube implementiert wurden.
Verzeichnisinhalte können unter Linux nicht gelesen werden, weil sie nicht versteckt werden müssen, sondern weil Features nur dann existieren, wenn sie implementiert sind, und dieses Feature sinnlos ist und seinen Preis hat. Da das Format vom Dateisystem abhängt, ist es eine ziemlich sinnlose Funktion:Ein Programm kann das Format dessen, was es liest, nicht kennen. Es ist auch kein ganz triviales Feature zu unterstützen:Einige Dateisysteme organisieren Verzeichnisse auf eine Weise, die nicht nur ein Strom von Bytes ist, zum Beispiel kann es als B-Baum organisiert sein. Einige Unix-Varianten erlauben Anwendungen immer noch, Verzeichnisinhalte direkt zu lesen, aus Gründen der Abwärtskompatibilität, aber Linux hat dieses Feature nicht (und hatte es, soweit ich mich erinnern kann, nie – es war bereits in den frühen 1990er Jahren ein veraltetes Feature).
Ja, aber:
- Moderne Systeme speichern Dateinamen anders. Im ursprünglichen Unix waren Namen auf 14 Zeichen beschränkt, mit 2 Bytes für Inode.
- Die Schnittstelle zum Verzeichnis erfolgt über die Funktionen
opendir
,readdir
,closedir
stattopen
,read
,close
um die Veränderung in der Organisation widerzuspiegeln. - da niemand aus praktischen Gründen 16-Byte-Verzeichniseinträge lesen muss, haben die Designer die Möglichkeit weggelassen, rohe Verzeichnisdateien von Programmen zu lesen, die zum Lesen von Dateien entwickelt wurden .
Weiterführende Literatur:
- Howto:C-Programmierung mit Verzeichnissen unter Linux
- Frage zu opendir, readdir usw., Usenet-Thread von 1990, in dem die moderne diskutiert wird Implementierung von
opendir
usw.