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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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)