Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

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

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 version 2.10 de la glibc : */ _POSIX_C_SOURCE >= 200809L
               || /* Versions de la 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  is  relative  but  dirfd is neither AT_FDCWD nor a valid file
              descriptor.

       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 version 2.1 de la glibc.

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

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 │
       └─────────────────────────────────────────────────┴──────────────────────┴────────────────┘

CONFORMITÉ

       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 version 2.10 de la glibc, 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 version 2.10 de la  glibc
       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)

COLOPHON

       Cette page fait partie de la publication 5.13 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⟩.