posix_fadvise(2) System Calls Manual posix_fadvise(2) NUME posix_fadvise - predeclara un model de acces pentru datele din fiiere BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int posix_fadvise(int fd, off_t offset, off_t size, int advice); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): posix_fadvise(): _POSIX_C_SOURCE >= 200112L DESCRIERE Programele pot utiliza posix_fadvise() pentru a anuna intenia de a accesa in viitor datele unui fiier dupa un anumit model, permiand astfel nucleului sa efectueze optimizarile corespunzatoare. Argumentul advice se aplica unei regiuni (care nu exista neaparat) care incepe la offset i se intinde pe size octei (sau pana la sfaritul fiierului daca size este 0) in cadrul fiierului la care se face referire prin fd. advice nu este obligatoriu; acesta constituie doar o ateptare din partea aplicaiei. Valorile admise pentru advice includ: POSIX_FADV_NORMAL Indica faptul ca aplicaia nu are nici o indicaie ,,advice" de dat cu privire la modelul sau de acces pentru datele specificate. In cazul in care nu se ofera niciun sfat pentru un fiier deschis, aceasta este presupunerea implicita. POSIX_FADV_SEQUENTIAL Aplicaia se ateapta sa acceseze datele specificate in mod secvenial (cu citirea poziiilor inferioare inaintea celor superioare). POSIX_FADV_RANDOM Datele specificate vor fi accesate in ordine aleatorie. POSIX_FADV_NOREUSE Datele specificate vor fi accesate o singura data. Inainte de Linux 2.6.18, POSIX_FADV_NOREUSE avea aceeai semantica ca POSIX_FADV_WILLNEED. Aceasta a fost probabil o eroare; de la Linux 2.6.18 pana la Linux 6.2, acest fanion a fost un no-op. Incepand cu Linux 6.3, POSIX_FADV_NOREUSE semnaleaza faptul ca algoritmul de inlocuire a paginilor din nucleu poate ignora accesul la memoria cache a paginilor cartografiate marcate de acest fanion. Acest lucru este util, de exemplu, in timpul transmiterii de fiiere mari. POSIX_FADV_WILLNEED Datele specificate vor fi accesate in viitorul apropiat. POSIX_FADV_WILLNEED iniiaza o citire fara blocaj a regiunii specificate in memoria cache de pagina. Cantitatea de date citite poate fi diminuata de catre nucleu in funcie de incarcarea memoriei virtuale; (caiva megaoctei vor fi de obicei pe deplin satisfacatori, iar mai mult este rareori util). POSIX_FADV_DONTNEED Datele specificate nu vor fi accesate in viitorul apropiat. POSIX_FADV_DONTNEED incearca sa elibereze paginile din memoria cache asociate cu regiunea specificata. Acest lucru este util, de exemplu, in timpul transmiterii in flux a fiierelor mari. Un program poate solicita periodic nucleului sa elibereze datele din memoria cache care au fost deja utilizate, astfel incat paginile mai utile din memoria cache sa nu fie eliminate in schimb. Solicitarile de eliminare a paginilor pariale sunt ignorate. Este preferabil sa se pastreze datele necesare decat sa se renune la datele inutile. Daca aplicaia cere ca datele sa fie luate in considerare pentru a fi eliminate, atunci offset i size trebuie sa fie aliniate la pagina. Implementarea poate incerca sa scrie inapoi paginile ,,murdare" (scrise parial) din regiunea specificata, dar acest lucru nu este garantat. Toate paginile ,,murdare" nescrise nu vor fi eliberate. Daca aplicaia dorete sa se asigure ca paginile ,,murdare" vor fi eliberate, trebuie sa apeleze mai intai fsync(2) sau fdatasync(2). VALOAREA RETURNATA In caz de succes, se returneaza zero. In caz de eroare, se returneaza un numar de eroare. ERORI-IEIRE EBADF Argumentul fd nu este un descriptor de fiier valid. EINVAL A fost specificata o valoare nevalida pentru advice. ESPIPE Descriptorul de fiier specificat se refera la o conducta sau FIFO; (ESPIPE este eroarea specificata de POSIX, dar inainte de Linux 2.6.16, Linux a returnat EINVAL in acest caz). VERSIUNI In Linux, POSIX_FADV_NORMAL stabilete fereastra de citire-anticipata la dimensiunea implicita pentru dispozitivul de rezerva; POSIX_FADV_SEQUENTIAL dubleaza aceasta dimensiune, iar POSIX_FADV_RANDOM dezactiveaza complet citire-anticipata a fiierelor. POSIX_FADV_NOREUSE nu modifica dimensiunea ferestrei de citire-anticipata. Aceste modificari afecteaza intregul fiier, nu doar regiunea specificata (dar alte gestionare de fiier deschise pentru acelai fiier nu sunt afectate). Diferene intre biblioteca C i nucleu Numele funciei de invaluire din biblioteca C este posix_fadvise(). Apelul de sistem subiacent se numete fadvise64() (sau, pe unele arhitecturi, fadvise64_64()); diferena dintre cele doua este ca primul apel de sistem presupune ca tipul argumentului size este size_t, in timp ce al doilea se ateapta la loff_t. Variante specifice arhitecturii Unele arhitecturi necesita ca argumentele pe 64 de bii sa fie aliniate intr-o pereche adecvata de registre (a se vedea syscall(2) pentru mai multe detalii). Pe astfel de arhitecturi, semnatura de apelare a posix_fadvise() prezentata in SINOPSIS ar fora irosirea unui registru ca umplutura intre argumentele fd i offset. Prin urmare, aceste arhitecturi definesc o versiune a apelului de sistem care ordoneaza in mod corespunzator argumentele, dar care, in rest, este exact la fel ca posix_fadvise(). De exemplu, incepand cu Linux 2.6.14, ARM are urmatorul apel de sistem: long arm_fadvise64_64(int fd, int advice, loff_t offset, loff_t size); Aceste detalii specifice arhitecturii sunt, in general, ascunse aplicaiilor de catre funcia de invaluire glibc posix_fadvise(), care invoca apelul de sistem specific arhitecturii corespunzatoare. STANDARDE POSIX.1-2024. ISTORIC POSIX.1-2001. Suportul pentru nucleu a aparut pentru prima data in Linux 2.5.60; apelul de sistem subiacent se numete fadvise64(). Suportul pentru biblioteca a fost furnizat incepand cu glibc 2.2, prin intermediul funciei de invaluire posix_fadvise(). Incepand cu Linux 3.18, suportul pentru apelul de sistem subiacent este opional, in funcie de valoarea opiunii de configurare CONFIG_ADVISE_SYSCALLS. Tipul argumentului size a fost schimbat din size_t in off_t in POSIX.1-2001 TC1. NOTE Coninutul cache-ului tampon al nucleului poate fi ters prin intermediul interfeei /proc/sys/vm/drop_caches descrisa in proc(5). Se poate obine o imagine instantanee a paginilor dintr-un fiier care se afla in memoria cache tampon deschizand un fiier, cartografiindu-l cu mmap(2) i apoi aplicand mincore(2) la cartografiere. ERORI Inainte de Linux 2.6.6, daca lsize era specificat ca fiind 0, atunci acest lucru era interpretat literal ca fiind ,,zero octei", in loc sa insemne ,,toi octeii pana la sfaritul fiierului". CONSULTAI I fincore(1), mincore(2), readahead(2), sync_file_range(2), posix_fallocate(3), posix_madvise(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.17 8 februarie 2026 posix_fadvise(2)