readdir(3) Library Functions Manual readdir(3) NUME readdir - citete un director BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include struct dirent *readdir(DIR *dirp); DESCRIERE Funcia readdir() returneaza un indicator catre o structura dirent care reprezinta urmatoarea intrare de director din fluxul de directoare indicat de dirp. Aceasta returneaza NULL daca se ajunge la sfaritul fluxului de directoare sau daca s-a produs o eroare. In implementarea glibc, structura dirent este definita dupa cum urmeaza: struct dirent { ino_t d_ino; /* Numarul nodului-i */ off_t d_off; /* Nu este un decalaj; a se vedea mai jos */ unsigned short d_reclen; /* Lungimea acestei inregistrari */ unsigned char d_type; /* Tipul de fiier; nu este acceptat de catre toate tipurile de sisteme de fiiere */ char d_name[256]; /* Nume de fiier cu terminaie nula */ }; Singurele campuri din structura dirent care sunt impuse de POSIX.1 sunt d_name i d_ino. Celelalte campuri nu sunt standardizate i nu sunt prezente pe toate sistemele; a se vedea seciunea VERSIUNI. Campurile structurii dirent sunt urmatoarele: d_ino Acesta este numarul nodului-i al fiierului. d_off Valoarea returnata in d_off este aceeai care ar fi returnata prin apelarea telldir(3) la poziia curenta in fluxul de directoare. Reinei ca, in ciuda tipului i numelui sau, campul d_off este rareori un fel de decalaj de director pe sistemele de fiiere moderne. Aplicaiile trebuie sa trateze acest camp ca pe o valoare opaca, fara a face presupuneri cu privire la coninutul sau; consultai i telldir(3). d_reclen Aceasta este dimensiunea (in octei) a inregistrarii returnate. Aceasta poate sa nu coincida cu dimensiunea definiiei structurii prezentate mai sus; a se vedea seciunea VERSIUNI. d_type Acest camp conine o valoare care indica tipul de fiier, ceea ce permite evitarea apelarii lstat(2) daca aciunile ulterioare depind de tipul fiierului. Atunci cand este definit un macro test de caracteristica adecvat (_DEFAULT_SOURCE de la glibc 2.19 sau _BSD_SOURCE la glibc 2.19 i versiunile anterioare), glibc definete urmatoarele constante macro pentru valoarea returnata in d_type: DT_BLK Acesta este un dispozitiv de blocuri. DT_CHR Acesta este un dispozitiv de caractere. DT_DIR Acesta este un director. DT_FIFO Aceasta este o conducta cu nume (FIFO). DT_LNK Aceasta este o legatura simbolica. DT_REG Acesta este un fiier obinuit. DT_SOCK Acesta este un soclu de domeniu UNIX. DT_UNKNOWN Tipul fiierului nu a putut fi determinat. In prezent, numai unele sisteme de fiiere (printre care: Btrfs, ext2, ext3 i ext4) au suport complet pentru returnarea tipului de fiier in d_type. Toate aplicaiile trebuie sa gestioneze in mod corespunzator o returnare de tip DT_UNKNOWN. d_name Acest camp conine numele de fiier cu terminaie nula; a se vedea seciunea VERSIUNI. Datele returnate de readdir() pot fi suprascrise de apeluri ulterioare la readdir() pentru acelai flux de directoare. VALOAREA RETURNATA In caz de succes, readdir() returneaza un indicator catre o structura dirent. Aceasta structura poate fi alocata static; nu incercai sa o eliberai cu free(3). Daca se ajunge la sfaritul fluxului de directoare, se returneaza NULL i errno nu este modificata. Daca apare o eroare, NULL este returnat i errno este configurata pentru a indica eroarea. Pentru a distinge sfaritul fluxului de o eroare, definii errno la zero inainte de a apela readdir() i apoi verificai valoarea lui errno daca este returnat NULL. ERORI-IEIRE EBADF Descriptor de flux de director nevalid dirp. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +---------------------+---------------------+--------------------------+ |Interfaa | Atribut | Valoare | +---------------------+---------------------+--------------------------+ |readdir() | Sigurana firelor | MT-Unsafe race:dirstream | +---------------------+---------------------+--------------------------+ In actuala specificaie POSIX.1 (POSIX.1-2008), readdir() nu este necesar sa fie sigur pentru fir. Cu toate acestea, in implementarile moderne (inclusiv implementarea glibc), apelurile concurente la readdir() care specifica fluxuri de directoare diferite sunt sigure pentru fire. In cazurile in care mai multe fire de execuie trebuie sa citeasca din acelai flux de directoare, utilizarea readdir() cu sincronizare externa este preferabila utilizarii funciei depreciate readdir_r(3). Se preconizeaza ca o versiune viitoare a POSIX.1 va solicita ca funcia readdir() sa fie sigura pentru fire atunci cand este utilizata concomitent pe diferite fluxuri de directoare. VERSIUNI Doar campurile d_name i (ca extensie XSI) d_ino sunt specificate in POSIX.1. In afara de Linux, campul d_type este disponibil in principal numai pe sistemele BSD. Celelalte campuri sunt disponibile pe multe, dar nu pe toate sistemele. Sub glibc, programele pot verifica disponibilitatea campurilor care nu sunt definite in POSIX.1 testand daca macro-urile _DIRENT_HAVE_D_NAMLEN, _DIRENT_HAVE_D_RECLEN, _DIRENT_HAVE_D_OFF sau _DIRENT_HAVE_D_TYPE sunt definite. Campul d_name Definiia structurii dirent prezentata mai sus este preluata din anteturile glibc i prezinta campul d_name cu o dimensiune fixa. Avertisment: aplicaiile trebuie sa evite orice dependena de dimensiunea campului d_name. POSIX il definete ca fiind char d_name[], o matrice de caractere de dimensiune nespecificata, cu cel mult NAME_MAX caractere care preced octetul nul final (,,\0"). POSIX.1 menioneaza in mod explicit ca acest camp nu ar trebui sa fie utilizat ca o valoare ,,lvalue". Standardul menioneaza, de asemenea, ca utilizarea sizeof(d_name) este incorecta; utilizai in schimb strlen(d_name); (pe unele sisteme, acest camp este definit ca char d_name[1]!) Implicit, utilizarea sizeof(struct dirent) pentru a capta dimensiunea inregistrarii, inclusiv dimensiunea lui d_name, este de asemenea incorecta. Reinei ca, in timp ce apelul fpathconf(fd, _PC_NAME_MAX) returneaza valoarea 255 pentru majoritatea sistemelor de fiiere, pe unele sisteme de fiiere (de exemplu, CIFS, servere Windows SMB), numele de fiier cu terminaie nula care este (corect) returnat in d_name poate depai de fapt aceasta dimensiune. In astfel de cazuri, campul d_reclen va conine o valoare care depaete dimensiunea structurii glibc dirent prezentata mai sus. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.3BSD. NOTE Un flux de directoare este deschis utilizand opendir(3). Ordinea in care numele de fiiere sunt citite prin apeluri succesive la readdir() depinde de implementarea sistemului de fiiere; este puin probabil ca numele sa fie sortate in vreun fel. CONSULTAI I getdents(2), read(2), closedir(3), dirfd(3), ftw(3), offsetof(3), opendir(3), readdir_r(3), rewinddir(3), scandir(3), seekdir(3), telldir(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.12 23 iulie 2024 readdir(3)