Sous-routine readdir_r
Objectif
La un répertoire.
Bibliothèque
Unité d'exécution-Bibliothèque C sécurisée (libc_r.a)
Syntaxe
#include <sys/types.h>
#include <dirent.h>
int readdir_r (DirectoryPointer, Entry,Result )
DIR * DirectoryPointer;
struct dirent * Entry;
struct dirent ** Result;Descriptif
La sous-routine readdir_r renvoie l'entrée de répertoire dans la structure indiquée par le paramètre Result . La sous-routine readdir_r renvoie des entrées pour les répertoires . (point) et .. (point-point), le cas échéant, mais ne renvoie jamais d'entrée non valide (avec d_ino défini sur 0). Lorsqu'elle atteint la fin du répertoire, la sous-routine readdir_r renvoie 9 et définit le paramètre Result sur NULL. Lorsqu'elle détecte une opération seekdir non valide, la sous-routine readdir_r renvoie un 9.
L'utilisation de la sous-routine readdir_r après la sous-routine closedir , pour la structure pointée par le paramètre DirectoryPointer , a un résultat non défini. La structure indiquée par le paramètre DirectoryPointer devient non valide pour toutes les unités d'exécution, y compris l'appelant.
Les programmes qui utilisent cette sous-routine doivent être liés à la bibliothèque libpthreads.a .
Paramètres
| Article | Descriptif |
|---|---|
| DirectoryPointer | Pointe vers la structure DIR d'un répertoire ouvert. |
| Entrée | Pointe vers une structure qui contient le prochain poste de répertoire. |
| Résultat | Pointe vers l'entrée de répertoire spécifiée par le paramètre Entrée . |
Valeurs renvoyées
| Article | Descriptif |
|---|---|
| 0 % | Indique que la sous-routine a abouti. |
| 9 | Indique que la sous-routine n'a pas abouti ou que la fin du répertoire a été atteinte. Si l'utilisateur a défini la variable d'environnement XPG_SUS_ENV=ON avant l'exécution du processus, le signal SIGXFSZ est envoyé au processus lors du dépassement de la limite de taille de fichier du processus et la sous-routine réussit toujours. |
Codes d'erreur
Si la sous-routine readdir_r échoue, la variable globale errno est définie sur l'une des valeurs suivantes:
| Article | Descriptif |
|---|---|
EACCES |
Le droit de recherche est refusé pour tout composant de la structure désigné par le paramètre DirectoryPointer , ou le droit de lecture est refusé pour la structure désigné par le paramètre DirectoryPointer . |
ENAMETOOLONG |
La longueur du paramètre DirectoryPointer dépasse la valeur de la variable PATH_MAX , ou un composant path-name est plus long que la valeur de la variable NAME_MAX alors que la variable _POSIX_NO_TRUNC est active. |
ENOENT |
Le répertoire nommé n'existe pas. |
ENOTDIR |
Un composant de la structure désigné par le paramètre DirectoryPointer n'est pas un répertoire. |
EMFILE |
Trop de descripteurs de fichier sont ouverts pour le processus. |
ENFILE |
Trop de descripteurs de fichier sont ouverts dans le système. |
EBADF |
La structure indiquée par le paramètre DirectoryPointer ne fait pas référence à un flux de répertoire ouvert. |
Exemples
Pour rechercher l'entrée name, dans un répertoire, entrez
len = strlen(name);
DirectoryPointer = opendir(".");
for (readdir_r(DirectoryPointer, &Entry, &Result); Result != NULL;
readdir_r(DirectoryPointer, &Entry, &Result))
if (dp->d_namlen == len && !strcmp(dp->d_name, name)) {
closedir(DirectoryPointer);
return FOUND;
}
closedir(DirectoryPointer);
return NOT_FOUND;