Provided by: manpages-fr-dev_4.18.1-1_all bug

NOM

       readdir - Consulter un répertoire

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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  depuis  la
              glibc 2.19,  ou _BSD_SOURCE pour la glibc 2.19 ou antérieure), la glibc définit 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)).

       Lorsque  la  fin  du  flux  répertoire  est  atteinte, NULL est renvoyé et errno n'est pas
       modifiée. En cas d'erreur, NULL est renvoyée et errno  contient  le  code  d'erreur.  Pour
       distinguer  la  fin  du  flux  d'une erreur, il faut assigner errno à zéro avant d'appeler
       readdir() puis ensuite tester 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.

STANDARDS

       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)

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⟩.