ディレクトリはいつファイルに読み込まれませんか?

ディレクトリはいつファイルに読み込まれませんか?

私は「Unixプログラミング環境」という本の初版を持っています。第2章では、著者はディレクトリをファイルとして読み取ることができると言い、これらのファイル形式に関するいくつかの事実に言及しています。たとえば、cat .練習2-2では、いくつかの使用例があります。

少なくともダーウィンでは、ディレクトリはもはやファイルほど読みにくくなります。少なくとも読み取ると、長さがゼロのファイルとして表示されます。

いつこのような変化が起きましたか?関連公式文書がありますか?

ベストアンサー1

最新のPOSIX仕様(POSIX.1-2008)のエラー番号の参照には、次の内容が記載されています。

[エースディール]

ディレクトリです。指定された書き込みモードでディレクトリを開こうとします。

これは、POSIX準拠のオペレーティングシステムでは、ディレクトリが読み取り専用モード(O_RDONLY)で開かれている場合は、そのディレクトリを読み取ることができる必要があることを意味します。

私はNetBSD(POSIXに興味がある)マシンでこれを試してみましたが、期待どおりに機能しましたが、EISDIRを使用するGNU / Linuxでは失敗しました(これは起こってはいけません)。

Linuxを少し見てみると、これが意図的なものであることがわかります(http://lxr.free-electrons.com/source/fs/libfs.c#L189):

ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
{
        return -EISDIR;
}

特定のファイルシステム実装はそれをオーバーライドできますが(Cephと同様に:http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142)、デフォルトの動作は、ディレクトリが読み取り専用で開いていても、誰かがディレクトリを読み取ろうとするたびにEISDIRを返すことです。

この変更を2.0.xで追跡してみると、少なくともext2ファイルシステムではまだそうです。

はい。 POSIX準拠のオペレーティングシステムではディレクトリを読み取ることができるはずですが、一部のカーネル(Linuxや他のカーネルなど)はこの条件を無視して標準に違反します。

おすすめ記事