Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       readdir - Consulter un répertoire

SYNOPSIS

       #include <dirent.h>

       struct dirent *readdir(DIR *dirp);

DESCRIPTION

       La fonction readdir() renvoie un pointeur sur une structure dirent représentant l'entrée suivante du flux
       répertoire pointé par dirp. Elle renvoie NULL à la fin du répertoire ou en cas d'erreur.

       Dans l'implémentation de la glibc, la structure dirent est définie comme suit :

           struct dirent {
               ino_t          d_ino;       /* numéro d'inœud */
               off_t          d_off;       /* pas une position ; consultez NOTES */
               unsigned short d_reclen;    /* longueur de cet enregistrement */
               unsigned char  d_type;      /* type du fichier ; pas pris en
                                              charge par tous les types de
                                              système de fichiers */
               char           d_name[256]; /* nom du fichier terminé par l'octet NULL */
           };

       Les  seuls  champs exigés par POSIX.1 pour la structure dirent sont d_name et d_ino. Les autres champs ne
       sont pas normalisés et ne sont pas présents sur tous les systèmes ; consultez les NOTES  ci-dessous  pour
       plus de détails.

       Les champs de la structure dirent sont les suivants :

       d_ino  Le numéro d'inode du fichier.

       d_off  La  valeur  renvoyée dans d_off est celle qui serait renvoyée en appelant telldir(3) à la position
              actuelle dans le flux répertoire. Soyez conscient que, malgré son type et son nom, le champ  d_off
              ne  représente  que  rarement  une  sorte  de  position de répertoire sur les systèmes de fichiers
              modernes. Les applications devraient traiter ce champ comme  une  valeur  opaque,  sans  faire  de
              supposition sur son contenu. Consultez aussi telldir(3).

       d_reclen
              La taille (en octets) de l'enregistrement renvoyé. Elle peut ne pas correspondre à la taille de la
              définition de la structure montrée plus haut ; voir NOTES.

       d_type Ce  champ contient une valeur indiquant le type du fichier, permettant d'éviter le coût d'un appel
              à lstat(2) si d'autres actions dépendent du type du fichier.

              Lorsqu'une macro de test de fonctionnalité est définie (_DEFAULT_SOURCE pour les  versions  de  la
              glibc  supérieures  à 2.19,  ou _BSD_SOURCE pour la version 2.19 ou les versions inférieures de la
              glibc), la glibc définie les constantes  de  macro  suivantes  pour  les  valeurs  renvoyées  dans
              d_type :

              DT_BLK      Il s'agit d'un périphérique bloc.

              DT_CHR      Il s'agit d'un périphérique caractère.

              DT_DIR      Il s'agit d'un répertoire

              DT_FIFO     Il s'agit d'un tube nommé (FIFO).

              DT_LNK      Il s'agit d'un lien symbolique.

              DT_REG      Il s'agit d'un fichier ordinaire.

              DT_SOCK     Il s'agit d'un socket de domaine UNIX.

              DT_UNKNOWN  Le type du fichier n'a pu être déterminé.

              Actuellement,  seuls  certains  systèmes  de  fichiers  (parmi lesquels Btrfs, ext2, ext3 et ext4)
              prennent complètement en charge le renvoi du type de fichier dans d_type. Toutes les  applications
              doivent gérer correctement une valeur de retour valant DT_UNKNOWN.

       d_name Ce champ contient le nom de fichier terminé par l'octet NULL. Voir NOTES.

       Les  données  renvoyées  par readdir() sont écrasées lors de l'appel suivant à readdir() sur le même flux
       répertoire.

VALEUR RENVOYÉE

       En cas de succès, readdir() renvoie un pointeur sur une structure dirent (cette structure peut avoir  été
       allouée statiquement ; n'essayez pas de la désallouer avec free(3)).

       Si la fin du flux répertoire est atteinte, NULL est renvoyé et errno n'est pas modifiée. Si une erreur se
       produit,  NULL  est  renvoyé  et  errno contient le code d'erreur. Pour différencier la fin du flux d'une
       erreur, affectez errno à zéro avant d'appeler readdir() et vérifiez ensuite la valeur de  errno  si  NULL
       est renvoyé.

ERREURS

       EBADF  Le descripteur de flux répertoire dirp n'est pas valable.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌───────────┬──────────────────────┬──────────────────────────┐
       │ InterfaceAttributValeur                   │
       ├───────────┼──────────────────────┼──────────────────────────┤
       │ readdir() │ Sécurité des threads │ MT-Unsafe race:dirstream │
       └───────────┴──────────────────────┴──────────────────────────┘

       Dans  la  spécification  POSIX.1  courante  (POSIX.1-2008),  il  n'est pas requis que readdir(3) soit sûr
       vis-à-vis des threads. Cependant, dans les  implémentations  modernes,  incluant  la  glibc,  des  appels
       concurrents à readdir(3) pour des flux répertoire différents sont sûrs vis-à-vis des threads. Dans le cas
       où  de multiples threads doivent lire depuis un flux de répertoire identique, l'utilisation de readdir(3)
       avec une synchronisation externe est toujours préférable à l'utilisation de readdir_r(3). Il est  attendu
       qu’une  future  version  de  POSIX.1  demande  que readdir() soit sûr vis-à-vis des threads lorsqu’il est
       employé simultanément sur des flux répertoire différents.

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

NOTES

       Un flux répertoire est ouvert avec opendir(3).

       L'ordre dans lequel les noms de fichier sont  lus  par  des  appels  successifs  à  readdir()  dépend  de
       l'implémentation  du système de fichiers ; il est peu probable que les noms soient triés d'une quelconque
       façon.

       Seuls les champs d_name et (comme extension XSI) d_ino sont spécifiés  dans  POSIX.1.  Ailleurs  que  sur
       Linux,  le  champ  d_type  est  principalement  disponible  sur  les systèmes BSD. Les autres champs sont
       disponibles sur beaucoup de systèmes, mais pas sur tous. Avec la glibc, les programmes  peuvent  vérifier
       la  disponibilité  des  champs  non  définis dans POSIX.1 en testant si les macros _DIRENT_HAVE_D_NAMLEN,
       _DIRENT_HAVE_D_RECLEN, _DIRENT_HAVE_D_OFF ou _DIRENT_HAVE_D_TYPE sont définies.

   Le champ d_name
       La définition de la structure dirent donnée ci-dessus est reprise des en-têtes de la glibc et  montre  le
       champ d_name avec une taille fixe.

       Avertissement : les applications devraient éviter tout dépendance sur la taille du champ d_name. POSIX la
       définit  comme  char d_name[],  un  tableau  de caractères de taille non spécifiée, avec au plus NAME_MAX
       caractères avant l'octet NULL final ('\0').

       POSIX.1 est explicite sur le fait que ce champ ne doit pas être utilisé comme une lvalue. La norme ajoute
       que l'utilisation de sizeof(d_name) est incorrecte ; utilisez strlen(d_name) à  la  place.  Sur  certains
       systèmes,  ce  champ  est  défini comme char d_name[1] ! Cela implique que l'utilisation de sizeof(struct
       dirent) pour déterminer la  taille  de  l'enregistrement,  y  compris  du  champ  d_name,  est  également
       incorrecte.

       Notez que bien que l'appel

           fpathconf(fd, _PC_NAME_MAX)

       renvoie  la  valeur  255  pour la plupart des systèmes de fichiers, le nom de fichier terminé par l'octet
       NULL qui est (correctement) renvoyé dans d_name peut en fait dépasser cette taille sur certains  systèmes
       de  fichiers  (CIFS  ou  les  serveurs  Windows  SMB  par  exemple).  Dans de tels cas, le champ d_reclen
       contiendra une valeur qui dépasse la taille de la structure dirent de la glibc montrée plus haut.

VOIR AUSSI

       getdents(2), read(2), closedir(3), dirfd(3), ftw(3), offsetof(3), opendir(3), readdir_r(3), rewinddir(3),
       scandir(3), seekdir(3), telldir(3)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions pour signaler des anomalies et la dernière version de cette page  peuvent  être  trouvées  à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La   traduction   française   de   cette   page   de   manuel   a   été   créée   par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>,  François  Micaux,  Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,      Thomas      Huriaux      <thomas.huriaux@gmail.com>,     Nicolas     François
       <nicolas.francois@centraliens.net>,    Florentin    Duneau    <fduneau@gmail.com>,     Simon     Paillard
       <simon.paillard@resel.enst-bretagne.fr>,     Denis    Barbier    <barbier@debian.org>,    David    Prévot
       <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

       Cette traduction est une documentation libre ; veuillez vous  reporter  à  la  GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si  vous  découvrez  un  bogue  dans la traduction de cette page de manuel, veuillez envoyer un message à
       debian-l10n-french@lists.debian.org.

                                                   6 mars 2019                                        READDIR(3)