| posix_fadvise(2) | System Calls Manual | posix_fadvise(2) |
posix_fadvise - predeclară un model de acces pentru datele din fișiere
Biblioteca C standard (libc, -lc)
#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
posix_fadvise():
_POSIX_C_SOURCE >= 200112L
Programele pot utiliza posix_fadvise() pentru a anunța intenția de a accesa în viitor datele unui fișier după un anumit model, permițând astfel nucleului să efectueze optimizările corespunzătoare.
Argumentul advice se aplică unei regiuni (care nu este neapărat existentă) care începe la offset și se extinde pe o lungime de len octeți (sau până la sfârșitul fișierului dacă len este 0) în cadrul fișierului la care face referire fd. fd nu este obligatoriu; el constituie doar o așteptare din partea aplicației.
Valorile admise pentru advice includ:
În caz de succes, se returnează zero. În caz de eroare, se returnează un număr de eroare.
În Linux, POSIX_FADV_NORMAL stabilește fereastra de citire-anticipată la dimensiunea implicită pentru dispozitivul respectiv; POSIX_FADV_SEQUENTIAL dublează această dimensiune, iar POSIX_FADV_RANDOM dezactivează complet citirea-anticipată de fișiere. Aceste modificări afectează întregul fișier, nu doar regiunea specificată (dar alte gestionări de fișiere deschise pentru același fișier nu sunt afectate).
Numele funcției de învăluire din biblioteca C este posix_fadvise(). Apelul de sistem subiacent se numește fadvise64() (sau, pe unele arhitecturi, fadvise64_64()); diferența dintre cele două este că primul apel de sistem presupune că tipul argumentului len este size_t, în timp ce al doilea se așteaptă ca loff_t să fie acolo.
Unele arhitecturi necesită ca argumentele pe 64 de biți să fie aliniate într-o pereche adecvată de registre (a se vedea syscall(2) pentru mai multe detalii). Pe astfel de arhitecturi, semnătura de apelare a posix_fadvise() prezentată în SINOPSIS ar forța irosirea unui registru ca umplutură între argumentele fd și offset. Prin urmare, aceste arhitecturi definesc o versiune a apelului de sistem care ordonează în mod corespunzător argumentele, dar care, în rest, este exact la fel ca posix_fadvise().
De exemplu, începând cu Linux 2.6.14, ARM are următorul apel de sistem:
long arm_fadvise64_64(int fd, int advice,
loff_t offset, loff_t len);
Aceste detalii specifice arhitecturii sunt, în general, ascunse aplicațiilor de către funcția de învăluire glibc posix_fadvise(), care invocă apelul de sistem specific arhitecturii corespunzătoare.
POSIX.1-2008.
POSIX.1-2001.
Suportul pentru nucleu a apărut pentru prima dată în Linux 2.5.60; apelul de sistem subiacent se numește fadvise64(). Suportul pentru bibliotecă a fost furnizat începând cu glibc 2.2, prin intermediul funcției de învăluire posix_fadvise().
Începând cu Linux 3.18, suportul pentru apelul de sistem subiacent este opțional, în funcție de valoarea opțiunii de configurare CONFIG_ADVISE_SYSCALLS.
Tipul argumentului len a fost schimbat din size_t în off_t în POSIX.1-2001 TC1.
Conținutul cache-ului tampon al nucleului poate fi șters prin intermediul interfeței /proc/sys/vm/drop_caches descrisă în proc(5).
Se poate obține o imagine instantanee a paginilor dintr-un fișier care se află în memoria cache tampon deschizând un fișier, cartografiindu-l cu mmap(2) și apoi aplicând mincore(2) la cartografiere.
Înainte de Linux 2.6.6, dacă len era specificat ca fiind 0, atunci acest lucru era interpretat literal ca fiind „zero octeți”, în loc să însemne „toți octeții până la sfârșitul fișierului”.
fincore(1), mincore(2), readahead(2), sync_file_range(2), posix_fallocate(3), posix_madvise(3)
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 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.
| 2 mai 2024 | Pagini de manual de Linux 6.9.1 |