scandir(3) Library Functions Manual scandir(3) NOM scandir, scandirat, alphasort, versionsort - Selectionner des elements d'un repertoire BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include 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 /* Definition des constantes AT_* */ #include 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 fonctionnalites pour la glibc (consulter feature_test_macros(7)) : scandir(), alphasort() : /* Depuis la glibc 2.10 : */ _POSIX_C_SOURCE >= 200809L || /* glibc <= 2.19 : */ _BSD_SOURCE versionsort() : _GNU_SOURCE scandirat() : _GNU_SOURCE DESCRIPTION La fonction scandir() examine le repertoire dirp, en appelant filter() pour chaque element rencontre. Les entrees pour lesquelles filter() renvoie une valeur non nulle sont stockees dans une table allouee avec malloc(3), triees avec qsort(3) en utilisant la fonction de comparaison compar(), puis regroupees dans une table namelist allouee avec malloc(3). Si filter est NULL, toutes les entrees sont selectionnees. Les fonctions alphasort() et versionsort() peuvent etre utilisees comme la fonction de comparaison compar. La premiere trie les entrees du repertoire en ordre alphabetique en utilisant strcoll(3), la seconde en utilisant strverscmp(3) sur les chaines (*a)->d_name et (*b)->d_name. scandirat() La fonction scandirat() fonctionne exactement comme scandir(), les seules differences etant decrites ici. Si le nom de chemin donne dans dirp est relatif, il est considere relatif au repertoire reference par le descripteur de fichier dirfd (plutot que relatif au repertoire 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 particuliere AT_FDCWD, alors dirp est considere relatif au repertoire de travail actuel du processus appelant (comme scandir()). Si dirp est absolu, alors dirfd est ignore. Consultez openat(2) pour une explication sur la necessite de scandirat(). VALEUR RENVOYEE La fonction scandir() renvoie le nombre d'entrees du repertoire selectionne si elle reussit, ou -1 si elle echoue, avec errno contenant le code d'erreur. Les fonctions alphasort() et versionsort() renvoient un entier negatif, nul ou positif si le premier argument est respectivement inferieur, egal ou superieur 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 memoire pour terminer l'operation. ENOTDIR Le chemin n'est pas un repertoire de dirp. ENOTDIR (scandirat()) dirp est un chemin relatif et dirfd est un descripteur de fichier referencant un fichier qui n'est pas un repertoire. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------------------+--------------------------+----------------+ |Interface | Attribut | Valeur | +--------------------------+--------------------------+----------------+ |scandir(), scandirat() | Securite des threads | MT-Safe | +--------------------------+--------------------------+----------------+ |alphasort(), | Securite des threads | MT-Safe locale | |versionsort() | | | +--------------------------+--------------------------+----------------+ STANDARDS alphasort() scandir() POSIX.1-2008. versionsort() scandirat() GNU. HISTORIQUE alphasort() scandir() 4.3BSD, POSIX.1-2008. versionsort() glibc 2.1. scandirat() glibc 2.15. NOTES Depuis la version 2.1 de la glibc, la fonction alphasort() invoque strcoll(3). Dans les versions precedentes, elle appelait strcmp(3). Avant la glibc 2.10, les deux arguments de alphasort() et versionsort() sont types comme des const void *. Dans la standardisation par POSIX.1-2008 de alphasort(), le type de l'argument est le type sur const struct dirent **, et la glibc 2.10 change cette definition d'alphasort() (et le non standard versionsort()) pour se conformer a la norme. EXEMPLES Le programme suivant imprime une liste des fichiers dans le repertoire courant dans l'ordre inverse. Source du programme #define _DEFAULT_SOURCE #include #include #include 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 scandir(3)