Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

       scandir, scandirat, alphasort, versionsort - Sélectionner des éléments d'un répertoire

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <dirent.h>

       int scandir(const char *restrict dirp,
                   struct dirent ***restrict namelist,
                   int (*filter)(const struct dirent *),
                   int (*compar)(const struct dirent **,
       const struct dirent **));

       int alphasort(const struct dirent **a, const struct dirent **b);
       int versionsort(const struct dirent **a, const struct dirent **b);

       #include <fcntl.h>          /* Définition des constantes AT_* */
       #include <dirent.h>

       int scandirat(int dirfd, const char *restrict dirp,
                   struct dirent ***restrict namelist,
                   int (*filter)(const struct dirent *),
                   int (*compar)(const struct dirent **,
       const struct dirent **));

   Exigences    de    macros    de   test   de   fonctionnalités   pour   la   glibc   (consulter
   feature_test_macros(7)) :

       scandir(), alphasort() :
           /* Depuis la glibc 2.10 : */ _POSIX_C_SOURCE >= 200809L
               || /* glibc <= 2.19 : */ _BSD_SOURCE || _SVID_SOURCE

       versionsort() :
           _GNU_SOURCE

       scandirat() :
           _GNU_SOURCE

DESCRIPTION

       La fonction scandir() examine le répertoire dirp, en appelant filter() pour chaque élément
       rencontré. Les entrées pour lesquelles filter() renvoie une valeur non nulle sont stockées
       dans une table allouée avec malloc(3), triées avec qsort(3) en utilisant  la  fonction  de
       comparaison  compar(),  puis regroupées dans une table namelist allouée avec malloc(3). Si
       filter est NULL, toutes les entrées sont sélectionnées.

       Les fonctions alphasort() et versionsort() peuvent être utilisées  comme  la  fonction  de
       comparaison  compar.  La  première trie les entrées du répertoire en ordre alphabétique en
       utilisant strcoll(3), la seconde en utilisant strverscmp(3) sur les  chaînes  (*a)->d_name
       et (*b)->d_name.

   scandirat()
       La  fonction  scandirat()  fonctionne  exactement  comme scandir(), les seules différences
       étant décrites ici.

       Si le nom de chemin donné dans dirp est relatif, il est considéré  relatif  au  répertoire
       référencé par le descripteur de fichier dirfd (plutôt que relatif au répertoire de travail
       actuel du processus appelant, comme avec scandir() pour un nom de chemin relatif).

       Si dirp est relatif et que dirfd est la  valeur  particulière  AT_FDCWD,  alors  dirp  est
       considéré relatif au répertoire de travail actuel du processus appelant (comme scandir()).

       Si dirp est absolu, alors dirfd est ignoré.

       Consultez openat(2) pour une explication sur la nécessité de scandirat().

VALEUR RENVOYÉE

       La  fonction  scandir()  renvoie  le  nombre  d'entrées  du répertoire sélectionné si elle
       réussit, ou -1 si elle échoue, avec errno contenant le code d'erreur.

       Les fonctions alphasort() et versionsort() renvoient un entier négatif, nul ou positif  si
       le premier argument est respectivement inférieur, égal ou supérieur au second.

ERREURS

       EBADF  (scandirat())   dirp est relatif mais dirfd n'est ni AT_FDCWD, ni un descripteur de
              fichier valable.

       ENOENT Le chemin n'existe pas dans dirp.

       ENOMEM Pas assez de mémoire pour terminer l'opération.

       ENOTDIR
              Le chemin n'est pas un répertoire de dirp.

       ENOTDIR
              (scandirat()) dirp est un chemin relatif et dirfd est  un  descripteur  de  fichier
              référençant un fichier qui n'est pas un répertoire.

VERSIONS

       versionsort() a été ajoutée dans la glibc 2.1.

       scandirat() a été ajoutée dans la glibc 2.15.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌─────────────────────────────────────────────────┬──────────────────────┬────────────────┐
       │InterfaceAttributValeur         │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │scandir(), scandirat()                           │ Sécurité des threads │ MT-Safe        │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │alphasort(), versionsort()                       │ Sécurité des threads │ MT-Safe locale │
       └─────────────────────────────────────────────────┴──────────────────────┴────────────────┘

STANDARDS

       alphasort(), scandir() : 4.3BSD, POSIX.1-2008.

       versionsort() et scandirat() sont des extensions GNU.

NOTES

       Depuis  la  version 2.1  de la glibc, la fonction alphasort() invoque strcoll(3). Dans les
       versions précédentes, elle appelait strcmp(3).

       Avant la glibc 2.10, les deux arguments de alphasort() et versionsort() sont  typés  comme
       des  const  void *.  Dans  la  standardisation par POSIX.1-2008 de alphasort(), le type de
       l'argument est le type  sûr  const  struct  dirent **,  et  la  glibc  2.10  change  cette
       définition d'alphasort() (et le non standard versionsort()) pour se conformer à la norme.

EXEMPLES

       Le  programme  suivant  imprime  une  liste  des  fichiers dans le répertoire courant dans
       l'ordre inverse.

   Source du programme

       #define _DEFAULT_SOURCE
       #include <dirent.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(void)
       {
           struct dirent **namelist;
           int n;

           n = scandir(".", &namelist, NULL, alphasort);
           if (n == -1) {
               perror("scandir");
               exit(EXIT_FAILURE);
           }

           while (n--) {
               printf("%s\n", namelist[n]->d_name);
               free(namelist[n]);
           }
           free(namelist);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       closedir(3), fnmatch(3),  opendir(3),  readdir(3),  rewinddir(3),  seekdir(3),  strcmp(3),
       strcoll(3), strverscmp(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⟩.