FSYNC(2) Linux Programmeurs Handleiding FSYNC(2)

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

#include <unistd.h>
int fsync(int bi);
int fdatasync(int bi);
Test Macro´s in 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

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.

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

bi is niet een geldige open-voor-schrijven bestandindicator.
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.
De schijfruimte raakte uitgeput tijdens het synchroniseren.
bi is gebonden aan een speciaal bestand (b.v. een pijp, FIFO of socket) dat synchronseren niet ondersteund.
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.

POSIX.1-2001, POSIX.1-2008, 4.3BSD.

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

Op sommige UNIX systemen (maar niet Linux), moet fd een schrijfbare bestandsbeschrijving zijn.

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.

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)

Deze pagina is onderdeel van release 5.13 van het Linux man-pages-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

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

22 maart 2021 Linux