od(1)がUNIXでは動いていたのに、なぜGNU/Linuxでは動かないのか疑問に思っていました。サーバー障害次の質問は、GNU/Linux でディレクトリ データのダンプをサポートするために od の動作をエミュレートできるツールをご存知ですか?
答え1
Linux では、プレーンな操作は許可されませんread(dir_name, buffer, sizeof(buffer)
。常に -1 を返し、 に EISDIR を配置しますerrno
。すべてのファイルシステムがディレクトリをファイルとして持つわけではないため、これはおそらく合理的です。たとえば、よく使用される reiserfs はそうではありません。
open()
C プログラムからシステム コールを使用してディレクトリのファイル記述子を取得できますが、 readdir(3)
(libc からの) 呼び出しなどを使用してgetdents(2)
実際にディレクトリ エントリを取得します。各ファイル システムの実装には、ファイル システムがディレクトリ エントリを保存するために使用するもの (ファイル、データベース、ディスク上の B ツリー) から作成するコードが含まれている可能性がありますstruct linux_dirent
。