Provided by: manpages-fr-dev_4.27.0-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  VERSIONS  ci-dessous
       pour plus de détails.

       Les champs de la structure dirent sont les suivants :

       d_ino  Le numéro d'inœud 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 VERSIONS.

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

       Les donnes 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é  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 actuelle (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.

VERSIONS

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

STANDARDS

       POSIX.1-2008.

HISTORIQUE

       POSIX.1-2001, 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.

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>, Frédéric Hantrais <fhantrais@gmail.com> 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.

Pages du manuel de Linux 6.9.1                    16 juin 2024                                        readdir(3)