Provided by: manpages-de-dev_2.16-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():
           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.03  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>.