fsync(2) | System Calls Manual | fsync(2) |
NAAM
fsync, fdatasync - synchroniseer de bestandsdata in het geheugen met het opslag apparaat
BIBLIOTHEEK
Standard C bibliotheek (libc, -lc)
SAMENVATTING
#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
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).)
VOLDOET AAN
POSIX.1-2008.
GESCHIEDENIS
POSIX.1-2001, 4.2BSD.
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 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.
2 mei 2024 | Linux man-pages 6.9.1 |