fsync(2) | System Calls Manual | fsync(2) |
fsync, fdatasync - synchroniseer de bestandsdata in het geheugen met het opslag apparaat
Standard C bibliotheek (libc, -lc)
#include <unistd.h>
int fsync(int bi);
int fdatasync(int bi);
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.
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)
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.
5 februari 2023 | Linux man-pagina's 6.03 |