J'ai la 1ère édition du livre The Unix Programming Environment. Dans le chapitre 2, les auteurs déclarent que les répertoires sont lisibles en tant que fichiers et mentionnent certains faits concernant le format de ces fichiers. Ils donnent des exemples d'utilisation tels que cat .
(dans l'exercice 2-2).
Au moins dans Darwin, les répertoires ne sont plus lisibles en tant que fichiers. Au moins, ils semblent être des fichiers de longueur nulle lors de la lecture.
Quand ce changement s'est-il produit et existe-t-il une documentation officielle à ce sujet?
files
filesystems
directory
Tyler
la source
la source
cat .
sur Solaris 11 (comme sous Linux), vous ne pouvez pas. Cool.Réponses:
La référence du numéro d'erreur de la dernière spécification POSIX (POSIX.1-2008) indique:
Cela signifie que, sur un système d'exploitation compatible POSIX, vous devriez pouvoir lire () un répertoire si vous l'avez ouvert en lecture seule (O_RDONLY).
Je viens d'essayer cela sur une boîte NetBSD (qui se soucie vraiment de POSIX) et fonctionne comme prévu, alors qu'il échoue sur GNU / Linux avec EISDIR (ce qui ne devrait pas se produire).
Un rapide coup d'œil à Linux montre que cela est prévu ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
Alors qu'une implémentation concrète d'un système de fichiers peut la remplacer (comme le fait le CEPH: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), le comportement par défaut est de renvoyer EISDIR chaque fois que quelqu'un essaie de read () un répertoire, même s'il est ouvert en lecture seule.
J'ai retracé ce changement jusqu'à 2.0.x, et au moins pour le système de fichiers ext2, c'était toujours le cas.
Donc, oui, sur un système d'exploitation compatible POSIX, vous devriez pouvoir lire un répertoire, mais certains noyaux (comme Linux et, apparemment, d'autres) ignorent simplement cette condition et enfreignent la norme.
la source
readdir(2)
est plus portable. Cela me suggère que la bonne réponse à la question d'OP est "Quand XSI est devenu populaire."