fsync(2)

NAAM
fsync, fdatasync - synchroniseer de bestandsdata in het geheugen met het opslag apparaat

BIBLIOTHEEK
Standaard C bibliotheek (libc, -lc)

SAMENVATTING
#include <unistd.h>

int fsync(int bi);

int fdatasync(int bi);

    Feature Test Macro Requirements voor glibc (zie feature_test_macros(7)):

fsync():
    Glibc 2.16 en later:
        Geen feature test macros moet worden gedefinieerd
    Glibc tot en met 2.15:
        _BSD_SOURCE || _XOPEN_SOURCE
            || /* Vanaf glibc 2.8: */ _POSIX_C_SOURCE >= 200112L

fdatasync():
    _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500

BESCHRIJVING
fsync() transfereert ("spoelt") alle gewijzigde data in het geheugen (m.a.w. gemodificeerd buffer cache pagina´s) van het bestand aangewezen door de bestandsbeschrijving fd naar het schijf apparaat (of een ander permanent opslag apparaat) zodat alle gewijzigde informatie kan worden opgehaald zelfs als het systeem vastloopt of wordt geherstart. Dit is omvat ook schrijven via of doorspoelen van een schijf cache als die aanwezig is). De aanroep blokkeert totdat het apparaat meldt dat de overdracht compleet is.

Net zoals het doorspoelen van de bestandsdata, spoelt fsync() ook de metadata informatie die geassocieerd zijn met het bestand door (zie inode(7)).

Het aanroepen van fsync() is geen garantie dat de ingang in de map die het bestand bevat ook op de schijf is terecht gekomen. Hiervoor is een expliciete aanroep van fsync() met de bestandsbeschrijving voor die map ook nodig.

fdatasync() is vergelijkbaar met fsync() maar spoelt gemodificeerde metadata niet door tenzij die metadata nodig is om een volgende data lees slag correct af te kunnen afhandelen. Bij voorbeeld veranderingen aan st_atime of st_mtime (respectievelijk tijd van laatste toegang en tijd van de laatste wijziging, zie inode(7)) vereisen niet het doorspoelen omdat ze niet nodig zijn om de volgende data lees actie correct af te handelen. Aan de andere kant zou een verandering aan de bestandsgrootte (st_size zoals gemaakt door zeg truncate(2)) het doorspoelen van de metadata vereisen.

Het doel van fdatasync() is om schijf activiteit te verminderen voor applicaties die niet vereisen dat metadata gesynchroniseerd wordt met de schijf.

EIND WAARDE
Bij succes retourneren deze systeem aanroepen. Bij falen wordt -1 teruggegeven, en errno gezet om de fout aan te duiden.

FOUTEN

EBADF
    bi is niet een geldige open-voor-schrijven bestandindicator.

EINTR
    De functie werd onderbroken door een signaal; zie signal(7).

EIO Een fout trad op gedurende synchroniseren. Deze fout kan verband houden met data geschreven naar een andere bestand beschrijving op hetzelfde bestand. Vanaf Linux 4.13 worden fouten van een schrijf-terug actie gerapporteerd naar alle bestandsbeschrijvingen die data geschreven kunnen hebben die de fout op riep. Sommige bestandssystemen (b.v. NFS) houden nauwgezet bij welke data kwam via welke bestandsbeschrijving en rapporteren dientengevolge nauwkeuriger. Andere bestandsystemen, meestal de lokale) zullen fouten naar alle bestandsbeschrijvingen rapporteren die open stonden op het bestand toen de fout werd opgetekend.

ENOSPC
    De schijfruimte raakte uitgeput tijdens het synchroniseren.

EROFS
EINVAL
    bi is gebonden aan een speciaal bestand (b.v. een pijp, FIFO of socket) dat synchronseren niet ondersteund.

ENOSPC
EDQUOT
    bi is gebonden aan een bestand op NFS of een ander bestandsysteem dat geen ruimte toewijst ten tijde van de write(2) systeem aanroep, en een eerdere schrijf actie faalde vanwege onvoldoende schijfruimte.

VERSIES
Op POSIX systemen op welke fdatasync() beschikbaar is, is _POSIX_SYNCHRONIZED_IO gedefinieerd in <unistd.h> met een waarde groter dan 0. (Zie ook sysconf(3).)

STANDAARDEN
POSIX.1-2024.

HISTORIE

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

fdatasync()
    POSIX.1-1996.

In Linux 2.2 en eerder is fdatasync() equivalent aan fsync() en heeft daarom geen prestatie voordeel.

De fsync() implementatie in oudere kernels en minder gebruikte bestandssystemen weet niet hoe schijf caches door te spoelen. In deze gevallen moeten disk caches worden uitgezet door gebruik van hdparm(8) of sdparm(8) om een veilige operatie te garanderen.

Onder AT&T UNIX System V Release 4 dient fd te worden geopend voor schrijven. Dit is in zich zelf niet compatibel met het originele BSD interface en is verboden door POSIX, maar is desondanks overleeft in HP-UX en AIX.

ZIE OOK
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)

VERTALING
De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.