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> char * DirectoryName;
struct dirent * (* NameList [ ]);
int (* Select) (struct dirent *);
int (* Compare)(void *, void *);
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 .