Prenons un système de fichiers ciblé sur certains périphériques intégrés qui ne fait guère plus que de stocker des fichiers dans une structure de répertoires hiérarchique. Ce système de fichiers manque de nombreuses opérations auxquelles vous pouvez être habitué dans des systèmes tels qu'Unix et Windows (par exemple, ses autorisations d'accès sont complètement différentes et non liées aux métadonnées stockées dans des répertoires). Ce système de fichiers n'autorise aucun type de lien dur ou de lien logiciel, donc chaque fichier a un nom unique dans une arborescence stricte.
Y a-t-il un avantage à stocker un lien vers le répertoire lui-même et vers son parent dans la structure de données sur disque qui représente un répertoire?
La plupart des systèmes de fichiers Unix ont .
et des ..
entrées sur le disque. Je me demande pourquoi ils ne gèrent pas ceux de la couche VFS (pilote de système de fichiers générique). Est-ce un artefact historique? Y a-t-il une bonne raison, et si oui, laquelle précisément, afin que je puisse déterminer si elle est pertinente pour mon système embarqué?
la source
Réponses:
Avoir des liens vers le répertoire parent me semble logique. Si vous ne les aviez pas, vous auriez toujours besoin de travailler avec toute une liste de répertoires. Ainsi, par exemple,
/home/svick/Documents/
devrait être représenté par{ /, /home/, /home/svick/, /home/svick/Documents }
. Si vous ne le faisiez pas, vous ne seriez pas en mesure de trouver le répertoire parent du tout (ou ce serait très cher). Ce n'est pas seulement inefficace, mais aussi dangereux. Si vous avez deux de ces listes qui se chevauchent, elles pourraient facilement se désynchroniser si vous déplaciez un répertoire.D'un autre côté, si vous avez une référence au répertoire parent, c'est plus efficace et plus sûr.
Je ne vois aucune raison d'avoir réellement un lien vers le répertoire courant. Si vous avez une structure qui représente un répertoire et que vous souhaitez accéder à ce répertoire, son utilisation
.
est toujours totalement inutile. Pour cette raison, je m'attendrais à ce que le.
lien n'existe pas réellement dans la structure du système de fichiers et soit uniquement virtuel.la source
.
et des..
entrées.Vous obtenez moins de cas spéciaux. Dans de nombreuses situations, VFS peut gérer ".." comme il gère tout autre nom de répertoire.
la source
La seule raison pour laquelle je peux imaginer est le scénario suivant:
Une implémentation originale d'un système de fichiers existait avec le même format de répertoire mais les notions de chemins de fichiers et de sous-répertoires n'étaient pas envisagées à l'époque (Voir Le système de fichiers Unix PDP-7 ).
Ensuite, les gens ont pensé que la résolution des chemins et les sous-répertoires seraient utiles!
Pour conserver une certaine compatibilité descendante avec les anciennes implémentations, il a été décidé que le
.
et..
sera stocké sur le disque comme tout autre répertoire.Alors peut-être que nous nous retrouvons avec ces artefacts inutiles, juste pour des raisons de rétrocompatibilité avec des logiciels vieux de 40 ans? Scénario crédible?
Remarque: il n'était pas complètement stupide d'ajouter ces entrées à la liste des répertoires, car vous devez de toute façon stocker le numéro d'inode de votre véritable répertoire parent (rappelez-vous que les liens physiques sur les répertoires étaient autorisés à ce moment), et une référence à votre son propre numéro d'inode peut être un bon test de santé mentale.
la source
Je ne vois pas de raison de l'implémenter
.
et..
à l'un ou l'autre niveau plutôt qu'à l'autre. Cependant, si vous ciblez des systèmes embarqués, n'importe quelle couche que vous pouvez économiser peut rapporter de l'argent, il peut donc être judicieux de tout mettre en œuvre le plus bas possible.Quant au besoin général de
.
et..
, comment exprimeriez-vous des chemins relatifs sans eux? Au moins..
est indispensable pour les chemins qui quittent le sous-arbre actuel. Si vous n'avez pas besoin de tels chemins (peut-être que l'arborescence est un moyen primitif de coder les privilèges d'accès?), Vous n'en avez pas besoin..
.la source