web-dev-qa-db-ja.com

odディレクトリのエミュレーション

なぜod(1)がUNIXで機能していたのに、GNU/Linuxでは機能しないのか疑問に思いました。 serverfault に良い答えがあります。次の質問は、GNU/Linuxでのディレクトリデータのダンプをサポートするためにodの動作をエミュレートできるツールを知っていますか?

5
sakisk

Linuxでは、単純なread(dir_name, buffer, sizeof(buffer)を実行できません。常に-1を返し、EISDIRをerrnoに配置します。すべてのファイルシステムがファイルとしてディレクトリを持っているわけではないので、これはおそらく合理的です。たとえば、一般的に使用されるreiserfsはそうではありません。

Cプログラムからのopen()システムコールを使用してディレクトリのファイル記述子を取得できますが、readdir(3)(libcから)のようなものは実際にはgetdents(2)を呼び出しますディレクトリエントリを取得します。ファイルシステムがディレクトリエントリを格納するために使用するもの(ファイル、データベース、ディスク上のBツリー)からstruct linux_direntを作成するために、各ファイルシステム実装におそらくコードがあります。

6
Bruce Ediger