Provided by: manpages-fr-dev_4.13-4_all bug

NOM

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

SYNOPSIS

       #include <dirent.h>

       int scandir(const char *dirp, struct dirent ***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 *dirp,
       struct dirent ***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é s'il réussit,
       ou -1 s'il échoue, avec errno qui contient 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

       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.

       Les erreurs supplémentaires suivantes peuvent se produire avec scandirat().

       EBADF  dirfd n'est pas un descripteur de fichier valable.

       ENOTDIR
              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.10 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 ⟨⟩.