Saya memiliki edisi pertama buku The Unix Programming Environment. Dalam bab 2, penulis menyatakan bahwa direktori dapat dibaca sebagai file, dan menyebutkan beberapa fakta tentang format file-file ini. Mereka memberikan beberapa contoh penggunaan seperti cat .
(dalam latihan 2-2).
Setidaknya di Darwin, direktori tidak lagi dapat dibaca sebagai file. Paling tidak, mereka tampak seperti file dengan panjang nol saat dibaca.
Kapan perubahan ini terjadi, dan adakah dokumentasi resmi tentang hal itu?
files
filesystems
directory
Tyler
sumber
sumber
cat .
menggunakan Solaris 11 (seperti di Linux) Anda tidak bisa. Keren.Jawaban:
Referensi nomor kesalahan dari spesifikasi POSIX terbaru (POSIX.1-2008) menyatakan:
Ini berarti bahwa, pada OS yang mendukung POSIX, Anda harus dapat membaca () direktori jika Anda membukanya hanya baca (O_RDONLY).
Saya baru saja mencoba ini pada kotak NetBSD (yang sangat peduli dengan POSIX), dan berfungsi seperti yang diharapkan, sementara gagal pada GNU / Linux dengan EISDIR (yang seharusnya tidak terjadi).
Pandangan cepat di Linux menunjukkan ini dimaksudkan ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
Sementara implementasi sistem file konkret dapat menimpanya (seperti CEPH: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), perilaku default adalah mengembalikan EISDIR setiap kali seseorang mencoba untuk baca () direktori, meskipun hanya buka baca.
Saya telah melacak perubahan ini kembali ke 2.0.x, dan setidaknya untuk sistem file ext2, ini masih terjadi.
Jadi, ya, pada OS yang mendukung POSIX Anda harus dapat membaca direktori, tetapi beberapa kernel (seperti Linux dan, tampaknya, yang lain) mengabaikan kondisi ini dan melanggar standar.
sumber
readdir(2)
lebih portabel. Itu menunjukkan kepada saya jawaban yang benar untuk pertanyaan OP adalah "Ketika XSI menjadi populer."