fsync(2) System Calls Manual fsync(2) BEZEICHNUNG fsync, fdatasync - den gepufferten Dateiinhalt mit einem Datentrager synchronisieren BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int fsync(int dd); int fdatasync(int dd); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): fsync(): Glibc 2.16 und neuer: Es mussen keine Feature-Test-Makros definiert werden Glibc bis zu einschliesslich 2.15: _BSD_SOURCE || _XOPEN_SOURCE || /* Seit Glibc 2.8: */ _POSIX_C_SOURCE >= 200112L fdatasync(): _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500 BESCHREIBUNG fsync() ubertragt (>>leert<<) alle veranderten gepufferten Daten (d.h. geanderte Seiten des Pufferzwischenspeichers) von der Datei, auf die der Dateideskriptor dd weist, auf die Platte (oder ein anderes dauerhaftes Speichermedium), so dass samtliche Anderungsinformationen sogar nach einem Absturz oder Neustart des Systems wieder hergestellt werden konnen. Dies beinhaltet das Schreiben oder Leeren eines Plattenzwischenspeichers, falls vorhanden. Der Aufruf blockiert bis das Gerat meldet, dass die Ubertragung vollstandig ist. Neben dem Leeren der Dateidaten leert fsync() auch alle Metadaten-Informationen, die mit der Datei verknupft sind (siehe inode(7)). Der Aufruf von fsync() garantiert nicht, dass der Verzeichniseintrag der Datei die Platte erreicht. Dafur wird auch ein explizites fsync() auf einem Dateideskriptor des Verzeichnisses benotigt. fdatasync() ist fsync() ahnlich, leert aber keine geanderten Metadaten, sofern diese Metadaten nicht benotigt werden, um die korrekte Handhabung einer nachfolgenden Datenabfrage zu ermoglichen. Anderungen an st_atime oder st_mtime (Zeit des letzten Zugriffs und Zeit der letzten Anderung; siehe inode(7)) erfordern zum Beispiel keine Leerung, da sie nicht fur die korrekte Handhabung eines nachfolgenden Lesens der Daten benotigt werden. Andererseits wurde die Anderung der Dateigrosse (st_size, wie sie von ftruncate(2) vorgenommen wird) ein Leeren der Metadaten erfordern. Das Ziel von fdatasync() ist die Verminderung der Plattenaktivitat durch Anwendungen, die nicht das Synchronisieren aller Metadaten mit der Platte erfordern. RUCKGABEWERT Bei Erfolg gibt dieser Systemaufruf Null zuruck. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER EBADF dd ist kein zulassiger offener Dateideskriptor. EINTR Die Funktion wurde durch ein Signal unterbrochen, siehe signal(7). EIO Wahrend 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 Zuruckschreiben an alle Dateideskriptoren, die Daten geschrieben haben konnten, die den Fehler auslosten, 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 Wahrend der Synchronisierung war der Plattenplatz ausgeschopft. EROFS EINVAL dd ist mit einer Spezialdatei (z.B. einer Pipe, einem FIFO oder einem Socket) verbunden, die keine Synchronisation unterstutzt. ENOSPC EDQUOT dd 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. VERSIONEN Auf POSIX-Systemen, auf denen fdatasync() verfugbar ist, ist _POSIX_SYNCHRONIZED_IO in als ein Wert grosser als 0 definiert. (Siehe auch sysconf(3).) STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, 4.2BSD. Bis einschliesslich Linux 2.2 entspricht fdatasync() fsync() und steigert daher nicht die Leistung. Die fsync()-Implementierungen in alteren Kerneln oder weniger benutzten Dateisystemen wissen nicht, wie Plattenzwischenspeicher geleert werden. In diesen Fallen mussen Plattenzwischenspeicher mittels hdparm(8) oder sdparm(8) deaktiviert werden, um sicheres Funktionieren zu garantieren. Unter AT&T UNIX System V Release 4 muss dd zum Schreiben geoffnet sein. Dies ist von sich aus zu der ursprunglichen BSD-Schnittstelle inkompatibel und wird durch POSIX verboten, hat aber trotzdem in HP-UX und AIX uberlebt. 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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Chris Leick , Mario Blattermann , Dr. Tobias Quathamer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 fsync(2)