readdir_r - Consulter un répertoire
Bibliothèque C standard (
libc,
-lc)
#include <dirent.h>
[[obsolète]] int readdir_r(DIR *restrict dirp,
struct dirent *restrict entry,
struct dirent **restrict result);
readdir_r() :
_POSIX_C_SOURCE
|| /* glibc <= 2.19 : */ _BSD_SOURCE || _SVID_SOURCE
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 glibc 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.
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.
- EBADF
- Le descripteur de flux répertoire dirp n'est
pas valable.
- ENAMETOOLONG
- Une entrée de répertoire dont le nom est trop
long pour être lu a été rencontrée.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
readdir_r() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
readdir(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Grégoire Scano <
[email protected]>
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 à
[email protected]