Provided by: manpages-fr-dev_4.21.0-2_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  em‐
       ployé 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 Li‐
       nux, le champ d_type est principalement disponible sur les systèmes BSD. Les autres  champs  sont  dispo‐
       nibles  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  ca‐
       ractè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 incor‐
       recte.

       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  contien‐
       dra 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  <tvi‐
       gnaud@mandriva.com>,  François  Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fe‐
       vrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau  <jcristau@de‐
       bian.org>,   Thomas   Huriaux   <thomas.huriaux@gmail.com>,  Nicolas  François  <nicolas.francois@centra‐
       liens.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.sca‐
       no@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 à  de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    5 février 2023                                       readdir(3)