ファイル名とファイルのinodeの関係

ファイル名とファイルのinodeの関係

ファイルの場合、「ファイル名」は対応するインデックスノードを指します。これは、対応する「ファイル名」が対応する索引ノードを含むデータ構造であるか、またはその索引ノードを指すポインターであることを意味しますか?

他の人は「ファイル名」が文字列であると言います。この文字列はどこかに保存されています(ファイルにも存在します)。

これら2つの文は矛盾していますか?

ハードリンクは他のファイルシステムのファイルにリンクできませんが、ソフトリンクは可能です。ファイル名ポインタは他のファイルシステムのinodeを指すことはできませんが、inodeに格納されているポインタは他のファイルシステムのファイル内容を指す可能性があるためですか?

ベストアンサー1

ファイル名はディレクトリのエントリです。デフォルトでは、ディレクトリは2つの列で構成される列です。ここで、最初の列はファイル名、2番目の列はinode番号です。 (最新のファイルシステムではより複雑ですが、説明のために問題ありません。)inode番号はinodeテーブルを指します。テーブルはユーザー空間プロセスには表示されませんが、呼び出しによって inode を照会できます。stat()またはシステムコールlstat()。 Inodeには、所有権、アクセス権、アクセス、変更、変更時間などのファイルのメタデータが含まれています。最も重要なことは、inodeがディスク上のファイルを見つける場所に関する情報を含めるかポイントすることです。

もう一つの重要な項目はリンクの数です。 inodeは複数の場所で指すことができるからです。ハードリンクrmを使用して(つまり、システムコールを使用して)ファイルを削除すると、ディレクトリ内のエントリのみが削除され、unlink()inodeのリンク数が減少します。 0に達した場合にのみ、inodeに関連付けられているディスク領域とinode自体が追加の再利用のために解放されます。

したがって、ファイル名は文字列であり、ディレクトリのデータ構造を介してポインティングが発生します。

ハードリンクは他のファイルシステムのファイルにリンクできませんが、ソフトリンクは可能です。ファイル名ポインタは他のファイルシステムのinodeを指すことはできませんが、inodeに格納されているポインタは他のファイルシステムのファイル内容を指す可能性があるためですか?

各ファイルシステムには独自のinodeテーブルがあります。 inodeテーブル内のエントリは、「自己」ファイルシステムのみを厳密に参照できます。したがって、ハードリンクはファイルシステムの境界を越えることはできません。

ソフトリンクは非常に異なります。デフォルトでは、ファイル名を含む小さなファイルです。プロセスがシンボリックリンクを開くと、システムはそれに従い、そのファイル名が参照するファイルを開きます。ソフトリンクはパス名のみに基づいているため、ファイルシステムの境界によって制限されません。

おすすめ記事