#include <dirent.h> struct dirent *readdir(DIR *dir); int readdir(DIR *dir, struct dirent *entry, struct dirent **result);
Sous Linux, la structure dirent est définie de la façon suivante :
struct dirent { ino_t d_ino; /* numéro d'inœud */ off_t d_off; /* décalage jusqu'à la dirent suivante */ unsigned short d_reclen; /* longueur de cet enregistrement */ unsigned char d_type; /* type du fichier */ char d_name[256]; /* nom du fichier */ };
D'après POSIX, la structure dirent contient un champ char d_name[] de taille non spécifiée, avec au plus NAME_MAX caractères avant l'octet nul final. POSIX.1-2001 documente aussi le champ ino_t d_ino comme une extension XSI. Les autres champs ne sont pas normalisés et ne sont pas présents sur tous les systèmes ; voir la section NOTES plus loin pour plus de détails.
Les données renvoyées par readdir() sont écrasées lors de l'appel suivant à readdir() sur le même flux répertoire.
La fonction readdir_r() est la version réentrante de readdir(). Elle lit la prochaine entrée de répertoire à partir du flux de répertoire dir, et la renvoie dans le tampon de l'appelant pointé par entry. (Voir la section NOTES pour des informations sur l'allocation de ce tampon.) Un pointeur vers l'élément renvoyé est placé dans *result ; si la fin du flux de répertoire est rencontrée, NULL est renvoyé dans *result.
La fonction readdir_r() renvoie 0 si elle réussit. Si elle échoue, elle renvoie un code d'erreur positif. Si la fin du répertoire est atteinte, readdir_r() renvoie 0 et renvoie NULL dans *result.
Ailleurs que sous Linux, le champ d_type n'est principalement disponible que sur les systèmes BSD. Ce champ permet d'éviter de devoir appeler stat(2) si d'autres actions dépendent du type de fichier. Si la macro de test de fonctionnalités _BSD_SOURCE est définie, la glibc définit les constantes suivantes pour la valeur renvoyée dans d_type :
Si le type de fichier ne peut pas être déterminé, la valeur DT_UNKNOWN est renvoyée dans d_type.
Puisque POSIX.1 ne spécifie pas la taille du champ d_name, et que d'autres champs non standard peuvent précéder ce champ dans la structure dirent, les applications portables utilisant readdir_r() devraient allouer le tampon dont l'adresse est passée dans entry de la façon suivante :
len = offsetof(struct dirent, d_name) + pathconf(dirpath, _PC_NAME_MAX) + 1 entryp = malloc(len);(POSIX.1 demande que d_name soit le dernier champ d'une structure dirent.)
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 5 novembre 1996 et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 readdir ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 17 juillet 2008