GNU/Linux >> Belajar Linux >  >> Linux

Kapan Direktori Berhenti Dapat Dibaca Sebagai File?

Saya memiliki edisi pertama buku Lingkungan Pemrograman Unix. Dalam bab 2, penulis menyatakan bahwa direktori dapat dibaca sebagai file, dan menyebutkan beberapa fakta tentang format file tersebut. Mereka memberikan beberapa contoh penggunaan seperti cat . (dalam latihan 2-2).

Setidaknya di Darwin, direktori tidak lagi dapat dibaca sebagai file. Setidaknya, mereka tampak seperti file tanpa panjang saat dibaca.

Kapan perubahan ini terjadi, dan apakah ada dokumentasi resmi tentangnya?

Jawaban yang Diterima:

Referensi nomor kesalahan dari spesifikasi POSIX terbaru (POSIX.1-2008) menyatakan:

[EISDIR]

Adalah sebuah direktori. Upaya telah dilakukan untuk membuka direktori dengan mode tulis yang ditentukan.

Ini berarti, pada OS yang mendukung POSIX, Anda seharusnya dapat membaca() direktori jika Anda membukanya hanya baca (O_RDONLY).

Saya baru saja mencoba ini di kotak NetBSD (yang benar-benar peduli dengan POSIX), dan berfungsi seperti yang diharapkan, sementara gagal di GNU/Linux dengan EISDIR (yang seharusnya tidak terjadi).

Sekilas melihat Linux menunjukkan ini dimaksudkan (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;
}

Sementara implementasi sistem file konkret dapat menimpanya (seperti yang dilakukan CEPH:http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142), perilaku defaultnya adalah mengembalikan EISDIR setiap kali seseorang mencoba read() sebuah direktori, meskipun itu terbuka hanya baca.

Saya telah melacak perubahan ini kembali ke 2.0.x, dan setidaknya untuk sistem file ext2, hal ini masih terjadi.

Jadi, ya, pada OS yang sesuai dengan POSIX Anda seharusnya dapat membaca direktori, tetapi beberapa kernel (seperti Linux dan, tampaknya, lainnya) mengabaikan kondisi ini dan melanggar standar.


Linux
  1. Cara Menjaga Kepemilikan Dan Izin File Tetap Utuh Saat Menyalin File Atau Direktori

  2. Jumlah maksimum file/direktori di Linux?

  3. Bagaimana cara mengabaikan direktori/file di Subversion?

  1. Temukan File atau Direktori Terbesar?

  2. Pindahkan file ke direktori berdasarkan ekstensi

  3. Temukan direktori yang berisi sejumlah file

  1. Kapan File yang Dapat Dieksekusi Tidak?

  2. Linux Hapus File dan Direktori

  3. cp hanya file, melewatkan direktori