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.

       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.08 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                             9. Juni 2020                          FSYNC(2)