Provided by: manpages-de-dev_0.10-1_all bug

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(): _BSD_SOURCE || _XOPEN_SOURCE
                || /* seit Glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
       fdatasync(): _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500

BESCHREIBUNG

       fsync() überträgt 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)  auf  dem die Datei liegt. Der Aufruf blockiert bis das
       Gerät meldet, dass die Übertragung  vollständig  ist.  Außerdem  werden
       Metadaten-Informationen  übertragen,  die  mit der Datei verknüpft sind
       (siehe stat(2)).

       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,  überträgt  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 stat(2)) erfordern zum Beispiel  keine
       Übertragung,   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 Übertragen 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 gültiger, zum Schreiben geöffneter Dateideskriptor.

       EIO    Während der Synchronisation ist ein Fehler aufgetreten.

       EROFS, EINVAL
              fd   ist   mit   einer   Spezialdatei   verbunden,   die   keine
              Synchronisation unterstützt.

KONFORM ZU

       4.3BSD, POSIX.1-2001.

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

       Anwendungen,  die  auf  Datenbanken  oder  Protokolldateien  zugreifen,
       schreiben  oft  ein  winziges  Datenfragment  (z.B. eine Zeile in einer
       Protokolldatei) und rufen dann sofort fsync() auf, um  sicherzustellen,
       dass  die  geschriebenen  Daten physisch auf der Festplatte gespeichert
       werden. Unglücklicherweise wird fsync() immer  zwei  Schreiboperationen
       anstoßen:  eine für die neu geschriebenen Daten und eine andere, um die
       im  Inode  gespeicherte  Änderungszeit  zu  aktualisieren.  Falls   die
       Änderungszeit   nicht   Teil   des   Transaktionskonzeptes   ist,  kann
       fdatasync() benutzt werden, um unnötige Inode-Plattenschreiboperationen
       zu vermeiden.

       Wenn  bei der zugrundeliegenden Festplatte die Zwischenspeicherung beim
       Schreiben eingeschaltet ist, dann kann es sein, dass die Daten bei  der
       Rückkehr von fsync()/fdatasync() nicht wirklich im dauerhaften Speicher
       liegen.

       Falls ein Ext2-Dateisystem mit der Option sync eingehängt  ist,  werden
       außerdem    auch    Verzeichniseinträge    implizit   mittels   fsync()
       synchronisiert.

       Auf Kerneln vor 2.4 kann fsync() bei großen Dateien  ineffizient  sein.
       Eine  Alternative könnte die Benutzung des Schalters O_SYNC für open(2)
       sein.

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

SIEHE AUCH

       bdflush(2),  open(2), sync(2), sync_file_range(2), hdparm(8), mount(8),
       sync(8), update(8)

KOLOPHON

       Diese  Seite  ist  Teil  der   Veröffentlichung   3.32   des   Projekts
       Linux-man-pages.  Eine Beschreibung des Projekts und Informationen, wie
       Fehler    gemeldet     werden     können,     finden     sich     unter
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite wurde von Chris Leick
       <c.leick@vollbio.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>.