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>.