fsync(2)

NUME
fsync, fdatasync, fdatasync - sincronizează starea din memorie a unui fișier cu dispozitivul de stocare

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <unistd.h>

int fsync(int fd);

int fdatasync(int fd);

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

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

DESCRIERE
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.

VALOAREA RETURNATĂ
Î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.

ERORI-IEȘIRE

EBADF
    descriptor-fișier nu este un descriptor de fișier deschis valid.

EINTR
    Apelul a fost întrerupt de un semnal; a se vedea signal(7).

EIO S-a produs o eroare în timpul sincronizării. Această eroare se poate referi la datele scrise în alt descriptor de fișier pentru același fișier.6 Începând cu Linux 4.13, erorile de rescriere vor fi raportate la toți descriptorii de fișiere care ar fi putut scrie datele care au declanșat eroarea. Unele sisteme de fișiere (de exemplu, NFS) urmăresc îndeaproape ce date au trecut prin fiecare descriptor de fișier și oferă o raportare mai precisă. Alte sisteme de fișiere (de exemplu, cele mai multe sisteme de fișiere locale) raportează erorile la toți descriptorii de fișiere care au fost deschiși asupra fișierului în momentul în care a fost înregistrată eroarea.

ENOSPC
    Spațiul pe disc a fost epuizat în timpul sincronizării.

EROFS
EINVAL
    fd este asociat la un fișier special (de exemplu, o conductă, FIFO sau un soclu) care nu acceptă sincronizarea.

ENOSPC
EDQUOT
    fd este asociat la un fișier pe NFS sau pe un alt sistem de fișiere care nu alocă spațiu în momentul unui apel de sistem write(2), iar o scriere anterioară a eșuat din cauza spațiului de stocare insuficient.

VERSIUNI
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)).

STANDARDE
POSIX.1-2024.

ISTORIC

fsync()
    4.2BSD, SUSv1, POSIX.1-1996.

fdatasync()
    POSIX.1-1996.

Î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.

CONSULTAȚI ȘI
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)

TRADUCERE
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 (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.