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() transfers ("flushes") all modified in-core data of (i.e., modified buffer cache pages for) the file referred to by the file descriptor fd to the disk device (or other permanent storage device) so that all changed information can be retrieved even after the system crashed or was rebooted. This includes writing through or flushing a disk cache if present. The call blocks until the device reports that the transfer has completed. It also flushes metadata information associated with the file (see 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() is similar to fsync(), but does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be correctly handled. For example, changes to st_atime or st_mtime (respectively, time of last access and time of last modification; see inode(7)) do not require flushing because they are not necessary for a subsequent data read to be handled correctly. On the other hand, a change to the file size (st_size, as made by say ftruncate(2)), would require a metadata flush. 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 offener Dateideskriptor.

EIO Während der Synchronisation ist ein Fehler aufgetreten.

EROFS, EINVAL
    fd ist mit einer Spezialdatei (z.B. einer PIPE, einem FIFO oder einem Socket) verbunden, die keine Synchronisation unterstützt.

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
This page is part of release 4.11 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at 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> und Dr. Tobias Quathamer <toddy@debian.org> 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>.