Chaque type de système de fichiers stocke les répertoires d'une manière différente. Il existe de nombreux types de systèmes de fichiers différents avec des caractéristiques différentes - bon pour un débit élevé, bon pour une concurrence élevée, bon pour les environnements à mémoire limitée, différents compromis entre les performances de lecture et d'écriture, entre la complexité et la stabilité, etc. Votre livre décrit un système de fichiers utilisé au début systèmes Unix. Les systèmes modernes prennent en charge de nombreux systèmes de fichiers différents.
Les toutes premières versions d'Unix comportaient de nombreuses manipulations du système de fichiers en dehors du noyau. Par exemple, mkdir
et rmdir
travaillé en éditant directement certaines structures de données du système de fichiers. Cela a été rapidement remplacé par une interface d'accès aux répertoires uniforme, le opendir
/readdir
/closedir
famille, qui permettait aux applications de manipuler des répertoires sans avoir à savoir comment ils étaient implémentés sous le capot.
La raison pour laquelle vous ne pouvez pas lire le contenu des répertoires sous Linux n'est pas parce qu'ils doivent être cachés, mais parce que les fonctionnalités n'existent que si elles sont implémentées, et cette fonctionnalité est inutile et a un coût. Étant donné que le format dépend du système de fichiers, c'est une fonctionnalité plutôt inutile :un programme ne peut pas connaître le format de ce qu'il lit. Ce n'est pas non plus une fonctionnalité complètement triviale à prendre en charge :certains systèmes de fichiers organisent les répertoires de manière à ne pas être simplement un flux d'octets, par exemple, ils peuvent être organisés en arbre B. Certaines variantes d'Unix permettent toujours aux applications de lire directement le contenu des répertoires, pour une compatibilité descendante, mais Linux n'a pas cette fonctionnalité (et n'en a jamais eu pour autant que je m'en souvienne - c'était déjà une fonctionnalité obsolète au début des années 1990).
Oui, mais :
- les systèmes modernes stockent les noms de fichiers différemment. Dans Unix d'origine, les noms étaient limités à 14 caractères, avec 2 octets pour l'inode.
- l'interface avec le répertoire se fait via les fonctions
opendir
,readdir
,closedir
plutôt queopen
,read
,close
pour refléter le changement d'organisation. - parce que personne n'a besoin de lire des entrées de répertoire de 16 octets, les concepteurs ont omis la possibilité de lire des fichiers de répertoire bruts à partir de programmes conçus pour lire des fichiers .
Lectures complémentaires :
- Tutoriel :Programmation en C avec des répertoires sous Linux
- question sur opendir, readdir, etc., fil Usenet en 1990 discutant du moderne implémentation de
opendir
, etc.