]> 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 ac45d2903082fdfeca278b066ab69998ba463ef2..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@gmx.net>
+.\" 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 2006-04-28 "Linux 1.3.85" "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
@@ -43,16 +44,33 @@ fsync, fdatasync \- synchronize a file's in-core state with storage device
 .BI "int fsync(int " fd );
 .sp
 .BI "int fdatasync(int " fd );
+.sp
+.in -4n
+Feature Test Macro Requirements for glibc (see
+.BR feature_test_macros (7)):
+.in
+.sp
+.BR fsync ():
+    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
 .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
+It also flushes metadata information associated with the file (see
 .BR stat (2)).
 
 Calling
@@ -85,11 +103,11 @@ as made by say
 would require a metadata flush.
 
 The aim of
-.BR fdatasync (2)
+.BR fdatasync ()
 is to reduce disk activity for applications that do not
-require all metadata to be synchronised with the disk.
-.SH "RETURN VALUE"
-On success, zero is returned.
+require all metadata to be synchronized with the disk.
+.SH RETURN VALUE
+On success, these system calls return zero.
 On error, \-1 is returned, and
 .I errno
 is set appropriately.
@@ -97,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.
@@ -105,37 +123,48 @@ 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 ()
+is available,
+.B _POSIX_SYNCHRONIZED_IO
+is defined in
+.I <unistd.h>
+to a value greater than 0.
+(See also
+.BR sysconf (3).)
+.\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
+.\" -1: unavailable, 0: ask using sysconf().
+.\" glibc defines them to 1.
 .SH NOTES
-If the underlying hard disk has write caching enabled, then
-the data may not really be on permanent storage when
-.BR fsync ()
-/
+On some UNIX systems (but not Linux),
+.I fd
+must be a
+.I writable
+file descriptor.
+
+In Linux 2.2 and earlier,
 .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,
+is equivalent to
+.BR fsync (),
+and so has no performance advantage.
+
+The
 .BR fsync ()
-on big files can be inefficient.
-An alternative might be to use the
-.I O_SYNC
-flag to
-.BR open (2).
-.SH "SEE ALSO"
+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)