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.

Remarque: la sous-routine readdir est réentrante lorsqu'un programme d'application utilise des valeurs de paramètre DirectoryPointer différentes (renvoyées par la sous-routine opendir ). Utilisez la sous-routine readdir_r lorsque plusieurs unités d'exécution utilisent le même pointeur de répertoire.

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

Tableau 1. 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

Tableau 2. 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:

Tableau 3. Codes d'erreur
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;