]> git.ipfire.org Git - thirdparty/man-pages.git/blobdiff - man2/fsync.2
locale.1, localedef.1, _exit.2, accept.2, access.2, acct.2, adjtimex.2, bdflush.2...
[thirdparty/man-pages.git] / man2 / fsync.2
index 9ba04983d6f361fa8c6c6c667762f938b24f07ec..76dcf96b1a18e3f50dee058c3fce055f7c81a69c 100644 (file)
@@ -1,8 +1,7 @@
-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
 .\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) and
 .\" and Copyright 2006 Michael Kerrisk <mtk.manpages@gmail.com>
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -22,6 +21,7 @@
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
 .\"   Removed note about old libc (pre-4.5.26) translating to 'sync'.
@@ -33,8 +33,9 @@
 .\" Modified 18 Apr 2001 by Andi Kleen
 .\"   Fix description to describe what it really does; add a few caveats.
 .\" 2006-04-28, mtk, substantial rewrite of various parts.
+.\" 2012-02-27 Various changes by Christoph Hellwig <hch@lst.de>
 .\"
-.TH FSYNC 2 2007-07-26 "Linux" "Linux Programmer's Manual"
+.TH FSYNC 2 2016-03-15 "Linux" "Linux Programmer's Manual"
 .SH NAME
 fsync, fdatasync \- synchronize a file's in-core state with storage device
 .SH SYNOPSIS
@@ -50,18 +51,24 @@ Feature Test Macro Requirements for glibc (see
 .in
 .sp
 .BR fsync ():
-_BSD_SOURCE || _XOPEN_SOURCE
+    Glibc 2.16 and later:
+        No feature test macros need be defined
+    Glibc up to and including 2.15:
+        _BSD_SOURCE || _XOPEN_SOURCE
+            || /* since glibc 2.8: */ _POSIX_C_SOURCE\ >=\ 200112L
 .br
 .BR fdatasync ():
-_POSIX_C_SOURCE\ >=\ 199309L || _XOPEN_SOURCE\ >=\ 500
+    _POSIX_C_SOURCE\ >=\ 199309L || _XOPEN_SOURCE\ >=\ 500
 .SH DESCRIPTION
 .BR fsync ()
 transfers ("flushes") all modified in-core data of
 (i.e., modified buffer cache pages for) the
 file referred to by the file descriptor
 .I fd
-to the disk device (or other permanent storage device)
-where that file resides.
+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
 .BR stat (2)).
@@ -99,7 +106,7 @@ The aim of
 .BR fdatasync ()
 is to reduce disk activity for applications that do not
 require all metadata to be synchronized with the disk.
-.SH "RETURN VALUE"
+.SH RETURN VALUE
 On success, these system calls return zero.
 On error, \-1 is returned, and
 .I errno
@@ -108,7 +115,7 @@ is set appropriately.
 .TP
 .B EBADF
 .I fd
-is not a valid file descriptor open for writing.
+is not a valid open file descriptor.
 .TP
 .B EIO
 An error occurred during synchronization.
@@ -116,8 +123,8 @@ An error occurred during synchronization.
 .BR EROFS ", " EINVAL
 .I fd
 is bound to a special file which does not support synchronization.
-.SH "CONFORMING TO"
-4.3BSD, POSIX.1-2001
+.SH CONFORMING TO
+POSIX.1-2001, POSIX.1-2008, 4.3BSD.
 .SH AVAILABILITY
 On POSIX systems on which
 .BR fdatasync ()
@@ -132,55 +139,32 @@ to a value greater than 0.
 .\" -1: unavailable, 0: ask using sysconf().
 .\" glibc defines them to 1.
 .SH NOTES
-Applications that access databases or log files often write a tiny
-data fragment (e.g., one line in a log file) and then call
-.BR fsync ()
-immediately in order to ensure that the written data is physically
-stored on the harddisk.
-Unfortunately,
-.BR fsync ()
-will always initiate two write operations: one for the newly written
-data and another one in order to update the modification time stored
-in the inode.
-If the modification time is not a part of the transaction
-concept
-.BR fdatasync ()
-can be used to avoid unnecessary inode disk write operations.
-
-If the underlying hard disk has write caching enabled, then
-the data may not really be on permanent storage when
-.BR fsync ()
-/
-.BR fdatasync ()
-return.
-.\" See
-.\" .BR hdparm (8)
-.\" for how to disable that cache for IDE disks.
-.LP
-When an ext2 file system is mounted with the
-.I sync
-option, directory entries are also implicitly synced by
-.BR fsync ().
-.LP
-On kernels before 2.4,
-.BR fsync ()
-on big files can be inefficient.
-An alternative might be to use the
-.B O_SYNC
-flag to
-.BR open (2).
+On some UNIX systems (but not Linux),
+.I fd
+must be a
+.I writable
+file descriptor.
 
 In Linux 2.2 and earlier,
 .BR fdatasync ()
 is equivalent to
 .BR fsync (),
 and so has no performance advantage.
-.SH "SEE ALSO"
+
+The
+.BR fsync ()
+implementations in older kernels and lesser used filesystems
+does not know how to flush disk caches.
+In these cases disk caches need to be disabled using
+.BR hdparm (8)
+or
+.BR sdparm (8)
+to guarantee safe operation.
+.SH SEE ALSO
 .BR bdflush (2),
 .BR open (2),
 .BR sync (2),
 .BR sync_file_range (2),
 .BR hdparm (8),
 .BR mount (8),
-.BR sync (8),
-.BR update (8)
+.BR sync (1)