私はファイルシステムについて学んでいますが、ディレクトリはファイルinodeペアのリストを保持する一般的なファイルにすぎません。
Downloads
次のいずれかのコマンドを使用してディレクトリを開こうとすると、ディレクトリなのでcat
less
tail
開くことができないというメッセージのみが出力されます。
アイデアはどのように読みますか?
答え1
修正:ディレクトリはファイル名とinodeのペアのリストです。 「一般」ファイルではありません。シンボリックリンク、ソケット、デバイスノードと同様に、通常のファイルとは異なる動作をします。
シェルでマッピングを表示できますls -i
。
Cから返された構造体には、このマッピングを見ることができるreaddir()
ad_name
と要素が含まれています。d_ino
ユーザー空間では、ディレクトリがファイル名を inode にマップするという事実は、一般にそれほど重要ではありません。なぜなら、カーネルはとにかくファイル名でファイルを指定する必要があるからです。 inode 番号でファイルを要求できません。
シンボリックリンクは、システムコールを使用してアクセスできないデータ(read()
一般ファイルなど)を含むファイルタイプの別の例です。この場合、データは特別な意味を持ちます。名前を指定するパス名。シンボリックリンクターゲット(文字列)。通常のファイルとは異なり、write()
withを使用してコンテンツを書き込みません。withをsymlink()
使用してコンテンツを読み取ります。read()
readlink()
答え2
ディレクトリはファイルに似ていますが、カーネルはディレクトリエントリを開いたり、読み込んだり書き込んだりする特定のシステムコールのみを許可してアクセスを制限します。以下は、C関数の違いのいくつかの例です。
File Directory
open() opendir()
read() readdir()
write() N/A
close() closedir()
答え3
また、オペレーティングシステムによって異なります。具体的な説明はわかりませんが、これに関してLinuxとUnixの動作の違いを経験しました。特にFreeBSDではcat
ディレクトリを使用できます。初めて試したときに私を捨てました。