| fsync(2) | System Calls Manual | fsync(2) |
fsync, fdatasync, fdatasync - sincronizează starea din memorie a unui fișier cu dispozitivul de stocare
Biblioteca C standard (libc, -lc)
#include <unistd.h>
int fsync(int fd);
int fdatasync(int fd);
fsync():
glibc 2.16 and later:
Nu este necesar să se definească macrocomenzi de testare a caracteristicilor
glibc până la și inclusiv 2.15:
_BSD_SOURCE || _XOPEN_SOURCE
|| /* Începând cu glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
fdatasync():
_POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500
fsync() transferă („golește”) toate datele modificate din interiorul memoriei (adică paginile modificate ale memoriei cache) pentru fișierul la care face referire descriptorul de fișier fd către dispozitivul de disc (sau alt dispozitiv de stocare permanentă), astfel încât toate informațiile modificate să poată fi recuperate chiar dacă sistemul se blochează sau este repornit. Această operație include scrierea sau golirea unei memorii cache pe disc, dacă este prezentă. Apelul se blochează până când dispozitivul raportează că transferul a fost finalizat.
Pe lângă golirea datelor din fișier, fsync() golește și informațiile privind metadatele asociate cu fișierul (a se vedea inode(7)).
Apelarea fsync() nu asigură în mod necesar că intrarea din directorul care conține fișierul a ajuns și ea pe disc. Pentru aceasta, este necesar un fsync() explicit pe un descriptor de fișier pentru director.
fdatasync() este similar cu fsync(), dar nu șterge metadatele modificate, cu excepția cazului în care aceste metadate sunt necesare pentru a permite ca o recuperare ulterioară a datelor să fie gestionată corect. De exemplu, modificările aduse la st_atime sau st_mtime (ora ultimului acces și, respectiv, ora ultimei modificări; a se vedea inode(7)) nu necesită golirea deoarece nu sunt necesare pentru ca o citire ulterioară a datelor să fie gestionată corect. Pe de altă parte, o modificare a mărimii fișierului (st_size, așa cum se face, de exemplu, prin ftruncate(2)), ar necesita o golire a metadatelor.
Scopul lui fdatasync() este de a reduce activitatea pe disc pentru aplicațiile care nu au nevoie ca toate metadatele să fie sincronizate cu discul.
În caz de succes, aceste apeluri de sistem returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
Pe sistemele POSIX pe care este disponibil fdatasync(), _POSIX_SYNCHRONIZED_IO este definit în <unistd.h> la o valoare mai mare decât 0; (a se vedea, de asemenea, sysconf(3)).
POSIX.1-2008.
POSIX.1-2001, 4.2BSD.
În Linux 2.2 și versiunile anterioare, fdatasync() este echivalent cu fsync() și, prin urmare, nu are niciun avantaj de performanță.
Implementările fsync() din nucleele mai vechi și sistemele de fișiere mai puțin utilizate nu știu cum să golească memoria cache de pe disc. În aceste cazuri, memoriile cache de disc trebuie dezactivate folosind hdparm(8) sau sdparm(8) pentru a garanta o funcționare sigură.
În AT&T UNIX System V Release 4, fd trebuie să fie deschis pentru scriere. Acest lucru este în sine incompatibil cu interfața BSD originală și este interzis de POSIX, dar totuși supraviețuiește în HP-UX și AIX.
sync(1), bdflush(2), open(2), posix_fadvise(2), pwritev(2), sync(2), sync_file_range(2), fflush(3), fileno(3), hdparm(8), mount(8)
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 |