Ogni tipo di filesystem memorizza le directory in modo diverso. Esistono molti tipi di filesystem diversi con caratteristiche diverse:buoni per un throughput elevato, buoni per un'elevata concorrenza, buoni per ambienti con memoria limitata, diversi compromessi tra prestazioni di lettura e scrittura, tra complessità e stabilità, ecc. Il tuo libro descrive un filesystem utilizzato all'inizio Sistemi Unix. I sistemi moderni supportano molti filesystem differenti.
Le primissime versioni di Unix avevano molte manipolazioni del filesystem al di fuori del kernel. Ad esempio, mkdir
e rmdir
ha funzionato modificando direttamente alcune strutture di dati del filesystem. Questo è stato rapidamente sostituito da un'interfaccia di accesso alla directory uniforme, il opendir
/readdir
/closedir
family, che consentiva alle applicazioni di manipolare le directory senza dover sapere come erano state implementate sotto il cofano.
Il motivo per cui non puoi leggere i contenuti delle directory sotto Linux non è perché devono essere nascosti, ma perché le funzionalità esistono solo se sono implementate, e questa funzionalità è inutile e ha un costo. Dato che il formato dipende dal filesystem, è una caratteristica piuttosto inutile:un programma non può conoscere il formato di ciò che sta leggendo. Non è nemmeno una funzionalità completamente banale da supportare:alcuni filesystem organizzano le directory in modi che non sono solo un flusso di byte, ad esempio può essere organizzato come un B-tree. Alcune varianti di Unix consentono ancora alle applicazioni di leggere direttamente i contenuti delle directory, per compatibilità con le versioni precedenti, ma Linux non ha questa funzionalità (e non l'ha mai avuta per quanto posso ricordare:era già una funzionalità obsoleta nei primi anni '90).
Sì, ma:
- i sistemi moderni memorizzano i nomi dei file in modo diverso. In Unix originale, i nomi erano limitati a 14 caratteri, con 2 byte per inode.
- l'interfaccia alla directory è tramite le funzioni
opendir
,readdir
,closedir
anzichéopen
,read
,close
per riflettere il cambiamento nell'organizzazione. - poiché nessuno ha la necessità pratica di leggere voci di directory a 16 byte, i progettisti hanno omesso la possibilità di leggere file di directory non elaborati da programmi progettati per leggere file .
Ulteriori letture:
- Howto:programmazione in C con directory su Linux
- domanda su opendir, readdir, ecc., thread Usenet nel 1990 che discuteva del moderno implementazione di
opendir
, ecc.