Scroll to navigation

READDIR_R(3) Manuel du programmeur Linux READDIR_R(3)

NOM

readdir_r - Consulter un répertoire

SYNOPSIS

#include <dirent.h>
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

readdir_r() :

_POSIX_C_SOURCE
|| /* Versions de la Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIPTION

Cette fonction est obsolète ; utilisez readdir(3) à la place.

La fonction readdir_r() est la version réentrante de readdir(3). Elle lit la prochaine entrée de répertoire à partir du flux répertoire dirp et la renvoie dans le tampon de l'appelant pointé par entry. Pour des détails sur la structure dirent, consultez readdir(3).

Un pointeur vers le tampon renvoyé est placé dans *result ; si la fin du flux de répertoire est rencontrée, NULL est renvoyé dans *result.

Il est recommandé que les applications utilisent readdir(3) à la place de readdir_r(). De plus, depuis la version 2.24, la glibc rend readdir_r() obsolète pour les raisons suivantes :

  • Pour les systèmes sur lesquels NAME_MAX n'est pas définit, appeler readdir_r() peut être non sûr parce que l'interface ne permet pas à l'appelant de fournir la longueur du tampon utilisé pour l'entrée de répertoire renvoyée.
  • Sur certains systèmes, readdir_r() ne peut pas lire les entrées de répertoire dont le nom est très long. Lorsque l'implémentation de la glibc rencontre un tel nom, readdir_r() échoue avec l'erreur ENAMETOOLONG après que la dernière entrée du répertoire ait été lue. Sur d'autres systèmes, readdir_r() peut renvoyer un état de réussite mais le champ d_name renvoyé peut ne pas être terminé par l'octet NULL ou peut être tronqué.
  • Dans la spécification POSIX.1 courante (POSIX.1-2008), il n'est pas requis que readdir(3) soit sûr vis-à-vis des threads. Cependant, dans les implémentations modernes, incluant la glibc, des appels concurrents à readdir(3) pour des flux répertoire différents sont sûrs vis-à-vis des threads. Par conséquent, l'utilisation de readdir_r() n'est généralement pas nécessaire dans les programmes multi-threadés. Dans le cas où de multiples threads doivent lire depuis un flux répertoire identique, l'utilisation de readdir(3) avec une synchronisation externe est toujours préférable à l'utilisation de readdir_r() pour les raisons citées dans le point ci-dessus.
  • Il est attendu qu'une future version de POSIX.1 rende readdir_r() obsolète et requière que readdir(3) soit sûre du point de vue des threads lorsqu'elle est employée de façon simultanée sur des flux répertoire différents.

VALEUR RENVOYÉE

La fonction readdir_r() renvoie 0 si elle réussit. Si elle échoue, elle renvoie un code d'erreur positif (documenté dans ERREURS). Si la fin du flux répertoire est atteinte, readdir_r() renvoie 0 et renvoie NULL dans *result.

ERREURS

Le descripteur de flux répertoire dirp n'est pas valable.
Une entrée de répertoire dont le nom est trop long pour être lu a été rencontrée.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes(7).

Interface Attribut Valeur
readdir_r() Sécurité des threads MT-Safe

CONFORMITÉ

POSIX.1-2001, POSIX.1-2008.

VOIR AUSSI

readdir(3)

COLOPHON

Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

1 mars 2016