Tengo la primera edición del libro The Unix Programming Environment. En el capítulo 2, los autores afirman que los directorios son legibles 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 son legibles como archivos. Al menos, parecen ser archivos de longitud cero cuando se leen.
¿Cuándo ocurrió este cambio? ¿Existe alguna documentación oficial al respecto?
files
filesystems
directory
Tyler
fuente
fuente
cat .
puede hacerlo mientras que en Solaris 11 (como en Linux) no puede. Guay.Respuestas:
La referencia del número de error de la última especificación POSIX (POSIX.1-2008) establece:
Esto significa que, en un sistema operativo compatible con POSIX, debería poder leer () un directorio si lo abrió 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 falla en GNU / Linux con EISDIR (lo que no debería suceder).
Un vistazo rápido a Linux muestra que esto está destinado ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
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 leer () un directorio, incluso si está abierto solo lectura.
He rastreado 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.
fuente
readdir(2)
Es más portátil. Eso me sugiere que la respuesta correcta a la pregunta de OP es "Cuando XSI se hizo popular".