GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuándo dejaron de ser legibles los directorios como archivos?

Tengo la primera edición del libro El entorno de programación de Unix. En el capítulo 2, los autores afirman que los directorios se pueden leer como archivos y mencionan algunos datos sobre el formato de estos archivos. Dan algunos ejemplos de uso como cat . (en el ejercicio 2-2).

Al menos en Darwin, los directorios ya no se pueden leer como archivos. Al menos, parecen ser archivos de longitud cero cuando se leen.

¿Cuándo ocurrió este cambio? ¿Hay alguna documentación oficial al respecto?

Respuesta aceptada:

La referencia del número de error de la especificación POSIX más reciente (POSIX.1-2008) establece:

[EISDIR]

Es un directorio. Se intentó abrir un directorio con el modo de escritura especificado.

Esto significa que, en un sistema operativo compatible con POSIX, debería poder leer () un directorio si lo abrió de solo lectura (O_RDONLY).

Acabo de probar esto en un cuadro de NetBSD (que realmente se preocupa por POSIX) y funciona como se esperaba, mientras que falla en GNU/Linux con EISDIR (lo que no debería suceder).

Una mirada rápida a Linux muestra que esto es lo que se pretende (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;
}

Si bien una implementación concreta del sistema de archivos puede anularlo (como lo hace CEPH:http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142), el comportamiento predeterminado es devolver EISDIR cada vez que alguien intenta read() un directorio, incluso si está abierto solo para lectura.

Rastreé este cambio hasta 2.0.x, y al menos para el sistema de archivos ext2, este seguía siendo el caso.

Entonces, sí, en un sistema operativo compatible con POSIX, debería poder leer un directorio, pero algunos núcleos (como Linux y, aparentemente, otros) simplemente ignoran esta condición y rompen el estándar.


Linux
  1. Linux Eliminar archivos y directorios

  2. ¿Número máximo de archivos/directorios en Linux?

  3. ¿Cómo ignorar directorios/archivos en Subversion?

  4. Mover archivos a directorios según la extensión

  5. cp solo archivos, saltando directorios

Buscar comando en Linux (Buscar archivos y directorios)

Cómo cambiar el nombre de archivos y directorios en Linux

Comando Ls en Linux (Lista de archivos y directorios)

Cómo comprimir archivos y directorios en Linux

Comprimir y archivar archivos y directorios

Encuentre archivos y directorios en Linux fácilmente