scandir, scandir64, alphasort ou alphasort64 Sous-routine

Objectif

Analyse ou trie le contenu du répertoire.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <sys/types.h>
#include <sys/dir.h>
int scandir(DirectoryName,NameList,Select,Compare)
char * DirectoryName;
struct dirent * (* NameList [ ]);
int (* Select) (struct dirent *);
int (* Compare)(void *, void *);
int alphasort ( Directory1,Directory2)
void *Directory1, *Directory2;
int scandir64(DirectoryName,NameList,Select,Compare)
char * DirectoryName;
struct dirent64 * (* NameList [ ]);
int (* Select) (struct dirent64 *);
int (* Compare)(void *, void *);

int alphasort64 ( Directory1,Directory2)
void *Directory1, *Directory2;

Descriptif

La sous-routine scandir lit le répertoire désigné par le paramètre DirectoryName , puis utilise la sous-routine malloc pour créer un tableau de pointeurs vers des entrées de répertoire. La sous-routine scandir renvoie le nombre d'entrées dans le tableau et, via le paramètre NameList , un pointeur vers le tableau.

Le paramètre Select pointe vers une sous-routine fournie par l'utilisateur et appelée par la sous-routine scandir pour sélectionner les entrées à inclure dans le tableau. La routine de sélection passe un pointeur vers une entrée de répertoire et doit renvoyer une valeur différente de zéro pour une entrée de répertoire incluse dans le tableau. Si le paramètre Sélectionner est une valeur null, toutes les entrées de répertoire sont incluses.

Le paramètre Compare pointe vers une sous-routine fournie par l'utilisateur. Cette routine est transmise à la sous-routine qsort pour trier le tableau terminé. Si le paramètre Compare est une valeur null, le tableau n'est pas trié. La sous-routine alphasort fournit des fonctions de comparaison permettant de trier par ordre alphabétique.

La mémoire allouée à la grappe peut être libérée en libérant chaque pointeur de la grappe et de la grappe elle-même, avec la sous-routine free .

Le sous-programme alphasort traite Directory1 et Directory2 comme des pointeurs vers des pointeurs ??? et les compare par ordre alphabétique. Cette sous-routine peut être transmise en tant que paramètre Compare à la sous-routine scandir ou à la sous-routine qsort , ou bien une sous-routine fournie par l'utilisateur peut être utilisée.

La sous-routine scandir64 est similaire à la sous-routine scandir sauf qu'elle renvoie un pointeur vers une liste de pointeurs vers struct dirent64 plutôt que vers struct dirent.

La sous-routine alphasort64 traite Directory1 et Directory2 comme des pointeurs vers des pointeurs dirent64 et les compare par ordre alphabétique. Cette sous-routine peut être transmise en tant que paramètre Comparer à la sous-routine scandir64 ou une sous-routine fournie par l'utilisateur peut être utilisée.

Paramètres

Article Descriptif
DirectoryName Pointe vers le nom du répertoire.
NameList Pointe vers le tableau des pointeurs vers les entrées de répertoire.
Sélectionner Pointe vers une sous-routine fournie par l'utilisateur qui est appelée par la sous-routine scandir pour sélectionner les entrées à inclure dans le tableau.
Comparer Pointe vers un sous-programme fourni par l'utilisateur qui trie le tableau terminé.
Directory1, Directory2 Pointez vers des structures ??? pour alphasortou vers des structures dirent64 pour alphasort64.

Valeurs renvoyées

Le sous-programme scandir renvoie la valeur -1 si le répertoire ne peut pas être ouvert en lecture ou si le sous-programme malloc ne peut pas allouer suffisamment de mémoire pour contenir toutes les structures de données. Si l'opération aboutit, la sous-routine scandir renvoie le nombre d'entrées trouvées. S'il n'y a pas d'entrée dans le répertoire, la sous-routine scandir renvoie 0 et le paramètre Namelist pointe sur NULL.

La sous-routine alphasort renvoie les valeurs suivantes:

Article Descriptif
Moins de 0 La structure ??? pointée par le paramètre Directory1 est lexiquement inférieure à la structure ??? pointée par le paramètre Directory2 .
0 % Les structures répertoire pointées par le paramètre Directory1 et le paramètre Directory2 sont identiques.
Supérieur à 0 La structure ??? indiquée par le paramètre Directory1 est lexiquement supérieure à la structure ??? indiquée par le paramètre Directory2 .

Les sous-routines scandir64 et alphasort64 renvoient des valeurs similaires à celles des sous-routines scandir et alphasort , sauf que les pointeurs renvoyés associés à une structure dirent sont désormais associés à une structure dirent64 .