GNU/Linux >> Linux Esercitazione >  >> Linux

Quando le directory hanno smesso di essere leggibili come file?

Ho la prima edizione del libro L'ambiente di programmazione Unix. Nel capitolo 2, gli autori affermano che le directory sono leggibili come file e menzionano alcuni fatti sul formato di questi file. Forniscono alcuni esempi di utilizzo come cat . (nell'esercizio 2-2).

Almeno in Darwin, le directory non sono più leggibili come file. Almeno, sembrano essere file di lunghezza zero quando vengono letti.

Quando si è verificata questa modifica e c'è della documentazione ufficiale a riguardo?

Risposta accettata:

Il riferimento al numero di errore dall'ultima specifica POSIX (POSIX.1-2008) afferma:

[EISDIR]

È una directory. Tentativo di aprire una directory con la modalità di scrittura specificata.

Ciò significa che, su un sistema operativo conforme a POSIX, dovresti essere in grado di leggere() una directory se l'hai aperta in sola lettura (O_RDONLY).

L'ho appena provato su una scatola NetBSD (che si preoccupa davvero di POSIX) e funziona come previsto, mentre fallisce su GNU/Linux con EISDIR (cosa che non dovrebbe accadere).

Una rapida occhiata a Linux mostra che questo è inteso (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;
}

Mentre un'implementazione concreta del filesystem può sovrascriverla (come fa CEPH:http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142), il comportamento predefinito è restituire EISDIR ogni volta che qualcuno sta cercando di read() una directory, anche se è aperta in sola lettura.

Ho fatto risalire questa modifica alla 2.0.x e, almeno per il filesystem ext2, era ancora così.

Quindi, sì, su un sistema operativo conforme a POSIX dovresti essere in grado di leggere una directory, ma alcuni kernel (come Linux e, a quanto pare, altri) ignorano semplicemente questa condizione e infrangono lo standard.


Linux
  1. Trova i file o le directory più grandi?

  2. Numero massimo di file/directory su Linux?

  3. Come ignorare directory/file in Subversion?

  4. Sposta i file nelle directory in base all'estensione

  5. Trova directory contenenti un certo numero di file

Trova comando in Linux (Trova file e directory)

Come rinominare file e directory in Linux

Comando Ls in Linux (Elenca file e directory)

Come comprimere file e directory in Linux

Compressione e archiviazione di file e directory

Trova facilmente file e directory su Linux