readdir_r(3)

NUME
readdir_r - citește un director

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <dirent.h>

[[depreciat]] int readdir_r(DIR *restrict dirp,
                             struct dirent *restrict entry,
                             struct dirent **restrict result);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

readdir_r():
    _POSIX_C_SOURCE
        || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIERE
Această funcție este depășită; utilizați în schimb readdir(3).

Funcția readdir_r() a fost inventată ca o versiune reentrantă a readdir(3). Aceasta citește următoarea intrare de director din fluxul de directoare dirp și o returnează în memoria tampon alocată de apelant, indicată de entry. Pentru detalii privind structura dirent, a se vedea readdir(3).

Un indicator la memoria tampon returnată este plasat în *result; dacă a fost întâlnit sfârșitul fluxului de directoare, atunci NULL este returnat în *result.

Se recomandă ca aplicațiile să utilizeze readdir(3) în loc de readdir_r(). În plus, începând cu glibc 2.24, glibc depreciază readdir_r(). Motivele sunt următoarele:

•   În sistemele în care NAME_MAX este nedefinit, apelarea readdir_r() poate fi nesigură, deoarece interfața nu permite apelantului să specifice lungimea memoriei tampon utilizate pentru intrarea de director returnată.

•   Pe unele sisteme, readdir_r() nu poate citi intrările de directoare cu nume foarte lungi. Atunci când implementarea glibc întâlnește un astfel de nume, readdir_r() eșuează cu eroarea ENAMETOOLONG după ce a fost citită ultima intrare de director. Pe alte sisteme, readdir_r() poate returna o stare de succes, dar câmpul d_name returnat poate să nu fie terminat la zero sau poate fi trunchiat.

•   În specificația POSIX.1 actuală (POSIX.1-2008), readdir(3) nu este necesar să fie sigur pentru fire de execuție. Cu toate acestea, în implementările moderne (inclusiv în implementarea glibc), apelurile simultane la readdir(3) care specifică fluxuri de directoare diferite sunt sigure pentru fire. Prin urmare, utilizarea lui readdir_r() nu este, în general, necesară în programele cu mai multe fire. În cazurile în care mai multe fire de execuție trebuie să citească din același flux de directoare, utilizarea readdir(3) cu sincronizare externă este în continuare preferabilă utilizării readdir_r(), din motivele prezentate la punctele de mai sus.

•   Se preconizează că o versiune viitoare a POSIX.1 va face ca readdir_r() să devină învechit și va impune ca readdir(3) să fie sigur pentru firele de execuție atunci când este utilizat simultan pe diferite fluxuri de directoare.

VALOAREA RETURNATĂ
Funcția readdir_r() returnează 0 în caz de succes. În caz de eroare, aceasta returnează un număr pozitiv de eroare (enumerat la rubrica ERRORI). Dacă se ajunge la sfârșitul fluxului de directoare, readdir_r() returnează 0 și returnează NULL în *result.

ERORI

EBADF
    Descriptor de flux de director nevalid dirp.

ENAMETOOLONG
    A fost întâlnită o intrare de director al cărei nume era prea lung pentru a fi citit.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
readdir_r() | Siguranța firelor | MT-Safe

STANDARDE
POSIX.1-2008.

ISTORIC
POSIX.1-2001.

CONSULTAȚI ȘI
readdir(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.