Každý typ souborového systému ukládá adresáře jiným způsobem. Existuje mnoho různých typů souborových systémů s různými charakteristikami – dobré pro vysokou propustnost, dobré pro vysokou souběžnost, dobré pro prostředí s omezenou pamětí, různé kompromisy mezi výkonem čtení a zápisu, mezi složitostí a stabilitou atd. Vaše kniha popisuje souborový systém používaný na počátku Unixové systémy. Moderní systémy podporují mnoho různých souborových systémů.
Velmi rané verze Unixu měly spoustu manipulace se souborovým systémem mimo jádro. Například mkdir
a rmdir
fungovalo přímou úpravou některých datových struktur souborového systému. To bylo rychle nahrazeno jednotným rozhraním pro přístup k adresářům, opendir
/readdir
/closedir
rodina, která aplikacím umožňovala manipulovat s adresáři, aniž by musely vědět, jak byly implementovány pod kapotou.
Důvod, proč nemůžete číst obsah adresáře pod Linuxem, není ten, že musí být skryt, ale protože funkce existují pouze tehdy, jsou-li implementovány, a tato funkce je zbytečná a stojí za to. Vzhledem k tomu, že formát závisí na souborovém systému, je to poněkud zbytečná funkce:program nemůže znát formát toho, co čte. Ani to není úplně triviální funkce, kterou by bylo možné podporovat:některé souborové systémy organizují adresáře způsoby, které nejsou jen proudem bajtů, například mohou být organizovány jako B-strom. Některé varianty Unixu stále umožňují aplikacím číst obsah adresáře přímo kvůli zpětné kompatibilitě, ale Linux tuto funkci nemá (a pokud si vzpomínám, nikdy ji neměl – byla to již zastaralá funkce na počátku 90. let).
Ano, ale:
- moderní systémy ukládají názvy souborů jinak. V původním Unixu byly názvy omezeny na 14 znaků s 2 bajty pro inode.
- Rozhraní k adresáři je přes funkce
opendir
,readdir
,closedir
spíše nežopen
,read
,close
odrážet změnu v organizaci. - protože nikdo prakticky nepotřebuje číst 16bajtové položky adresáře, návrháři vynechali možnost číst nezpracované soubory adresářů z programů, které jsou určeny ke čtení souborů .
Další čtení:
- Jak na to:Programování v jazyce C s adresáři v systému Linux
- otázka na opendir, readdir atd., vlákno Usenet v roce 1990 pojednávající o moderně implementace
opendir
atd.