fdatasync

FSYNC(2)                   Linux-Programmierhandbuch                  FSYNC(2)



BEZEICHNUNG
       fsync, fdatasync - den gepufferten Dateiinhalt mit einem Datenträger
       synchronisieren

ÃBERSICHT
       #include <unistd.h>

       int fsync(int fd);

       int fdatasync(int fd);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       fsync():
           Glibc 2.16 und neuer:
               Es müssen keine Feature-Test-Makros definiert werden
           Glibc bis zu einschlieÃlich 2.15:
               _BSD_SOURCE || _XOPEN_SOURCE
                   || /* seit Glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
       fdatasync():
           _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500

BESCHREIBUNG
       fsync() überträgt (»leert«) alle veränderten gepufferten Daten
       (d.h. geänderte Seiten des Pufferzwischenspeichers) von der Datei, auf
       die der Dateideskriptor fd weist, auf die Platte (oder ein anderes
       dauerhaftes Speichermedium), so dass sämtliche Ãnderungsinformationen
       sogar nach einem Absturz oder Neustart des Systems wieder hergestellt
       werden können. Dies beinhaltet das Schreiben oder Leeren eines
       Plattenzwischenspeichers, falls vorhanden. Der Aufruf blockiert bis das
       Gerät meldet, dass die Ãbertragung vollständig ist.

       Neben dem Leeren der Dateidaten leert fsync() auch alle
       Metadaten-Informationen, die mit der Datei verknüpft sind (siehe
       inode(7)).

       Der Aufruf von fsync() garantiert nicht, dass der Verzeichniseintrag
       der Datei die Platte erreicht. Dafür wird auch ein explizites fsync()
       auf einem Dateideskriptor des Verzeichnisses benötigt.

       fdatasync() ist fsync() ähnlich, leert aber keine geänderten
       Metadaten, sofern diese Metadaten nicht benötigt werden, um die
       korrekte Handhabung einer nachfolgenden Datenabfrage zu ermöglichen.
       Ãnderungen an st_atime oder st_mtime (Zeit des letzten Zugriffs und
       Zeit der letzten Ãnderung; siehe inode(7)) erfordern zum Beispiel keine
       Leerung, da sie nicht für die korrekte Handhabung eines nachfolgenden
       Lesens der Daten benötigt werden. Andererseits würde die Ãnderung der
       DateigröÃe (st_size, wie sie von ftruncate(2) vorgenommen wird) ein
       Leeren der Metadaten erfordern.

       Das Ziel von fdatasync() ist die Verminderung der Plattenaktivität
       durch Anwendungen, die nicht das Synchronisieren aller Metadaten mit
       der Platte erfordern.

RÃCKGABEWERT
       Bei Erfolg gibt dieser Systemaufruf Null zurück. Bei einem Fehler wird
       -1 zurückgegeben und errno entsprechend gesetzt.

FEHLER
       EBADF  fd ist kein zulässiger offener Dateideskriptor.

       EIO    Während der Synchronisation trat ein Fehler auf. Der Fehler
              kann sich auf Daten beziehen, die in einen anderen
              Dateideskriptor auf der gleichen Datei geschrieben wurden. Seit
              Linux 4.13 werden Fehler vom Zurückschreiben an alle
              Dateideskriptoren, die Daten geschrieben haben könnten, die den
              Fehler auslösten, berichtet. Einige Dateisystem (z.B. NFS)
              halten genau nach, welche Daten durch welchen Dateideskriptor
              gekommen sind und berichten genauer. Andere Dateisysteme (z.B.
              die meisten lokalen Dateisysteme) berichten Fehler an alle
              Dateideskriptoren, die zum Zeitpunkt der Aufzeichnung des
              Fehlers offen waren.

       ENOSPC Beim Synchronisieren wurde der Plattenplatz erschöpft.

       EROFS, EINVAL
              fd ist mit einer Spezialdatei (z.B. einer PIPE, einem FIFO oder
              einem Socket) verbunden, die keine Synchronisation unterstützt.

       ENOSPC, EDQUOT
              fd ist an eine Datei auf einem NFS- oder anderem Dateisystem,
              das keinen Platz zum Zeitpunkt des Systemaufrufs write(2)
              zuweist, gebunden und ein vorhergehender Schreibzugriff schlug
              aufgrund mangelndem Plattenplatz fehl.

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

VERFÃGBARKEIT
       Auf POSIX-Systemen, auf denen fdatasync() verfügbar ist, ist
       _POSIX_SYNCHRONIZED_IO in <unistd.h> als ein Wert gröÃer als 0
       definiert. (Siehe auch sysconf(3).)

ANMERKUNGEN
       Auf einigen UNIX-Systemen (aber nicht Linux) muss fd ein schreibbarer
       Dateideskriptor sein.

       Bis einschlieÃlich Linux 2.2 entspricht fdatasync() fsync() und
       steigert daher nicht die Leistung.

       Die fsync()-Implementierungen in älteren Kerneln oder weniger
       benutzten Dateisystemen wissen nicht, wie Plattenzwischenspeicher
       geleert werden. In diesen Fällen müssen Plattenzwischenspeicher
       mittels hdparm(8) oder sdparm(8) deaktiviert werden, um sicheres
       Funktionieren zu garantieren.

SIEHE AUCH
       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)

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.01 des Projekts
       Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie
       Fehler gemeldet werden können sowie die aktuelle Version dieser Seite
       finden sich unter https://www.kernel.org/doc/man-pages/.


ÃBERSETZUNG
       Die deutsche Ãbersetzung dieser Handbuchseite wurde von Chris Leick
       <c.leick@vollbio.de>, Mario Blättermann
       <mario.blaettermann@gmail.com>, Dr. Tobias Quathamer <toddy@debian.org>
       und Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese Ãbersetzung ist Freie Dokumentation; lesen Sie die GNU General
       Public License Version 3 oder neuer bezüglich der Copyright-
       Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Ãbersetzung dieser Handbuchseite finden,
       schicken Sie bitte eine E-Mail an <debian-l10n-
       german@lists.debian.org>.



Linux                            6. März 2019                        FSYNC(2)