各ファイルシステム タイプは、異なる方法でディレクトリを格納します。さまざまな特性を持つさまざまなファイルシステム タイプが多数あります。高スループットに適している、高い同時実行性に適している、限られたメモリ環境に適している、読み取りと書き込みのパフォーマンス間のさまざまな妥協点、複雑さと安定性の間のさまざまな妥協点などです。 Unix システム。最新のシステムは、さまざまなファイル システムをサポートしています。
Unix の非常に初期のバージョンには、カーネルの外部で多くのファイルシステム操作がありました。例:mkdir
と rmdir
一部のファイルシステムのデータ構造を直接編集することで機能しました。これはすぐに統一されたディレクトリ アクセス インターフェイス opendir
に置き換えられました。 /readdir
/closedir
これにより、アプリケーションは内部でどのように実装されているかを知らなくても、ディレクトリを操作できました。
Linux でディレクトリの内容を読み取れないのは、それらを隠蔽する必要があるからではなく、実装されている場合にのみ機能が存在し、この機能は無意味でコストがかかるためです。形式がファイルシステムに依存することを考えると、これはかなり無意味な機能です。プログラムは、読み取り対象の形式を知ることができません。どちらもサポートするのは完全に簡単な機能ではありません。一部のファイルシステムは、単なるバイト ストリームではない方法でディレクトリを編成します。たとえば、B ツリーとして編成される場合があります。一部の Unix バリアントでは、下位互換性のためにアプリケーションがディレクトリの内容を直接読み取ることができますが、Linux にはこの機能がありません (そして、私が思い出す限りではありませんでした — 1990 年代初頭には既に廃止された機能でした)。
はい、ただし:
- 最近のシステムでは、ファイル名の保存方法が異なります。元の Unix では、名前は 14 文字に制限されており、inode は 2 バイトでした。
- ディレクトリへのインターフェースは関数
opendir
経由です 、readdir
、closedir
open
ではなく 、read
、close
組織の変更を反映する - 誰も 16 バイトのディレクトリ エントリを実際に読み取る必要がないため、設計者は ファイル を読み取るように設計されたプログラムから未加工のディレクトリ ファイルを読み取る機能を省略しました。 .
さらに読む:
- ハウツー:Linux でのディレクトリを使用した C プログラミング
- opendir、readdir などに関する質問、1990 年の Usenet スレッド modern について議論
opendir
の実装 など