.\" Modified 2001-10-10 by aeb, following Michael Kerrisk.
.\" 2011-09-07, mtk, Added syncfs() documentation,
.\"
-.TH SYNC 2 2012-05-04 "Linux" "Linux Programmer's Manual"
+.TH SYNC 2 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
-sync, syncfs \- commit buffer cache to disk
+sync, syncfs \- commit filesystem caches to disk
.SH SYNOPSIS
.B #include <unistd.h>
-.sp
+.PP
.B void sync(void);
-.sp
+.PP
.BI "int syncfs(int " fd );
-.sp
+.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
-.sp
+.PP
.BR sync ():
.ad l
.RS 4
-_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
-_XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
+_XOPEN_SOURCE\ >=\ 500
+.\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
+ || /* Since glibc 2.19: */ _DEFAULT_SOURCE
+ || /* Glibc versions <= 2.19: */ _BSD_SOURCE
.RE
.ad
-.sp
+.PP
.BR syncfs ():
.ad l
.RS 4
.ad
.SH DESCRIPTION
.BR sync ()
-causes all buffered modifications to file metadata and data to be
-written to the underlying filesystems.
-
+causes all pending modifications to filesystem metadata and cached file
+data to be written to the underlying filesystems.
+.PP
.BR syncfs ()
is like
.BR sync (),
.SH ERRORS
.BR sync ()
is always successful.
-
+.PP
.BR syncfs ()
can fail for at least the following reason:
.TP
library support was added to glibc in version 2.14.
.SH CONFORMING TO
.BR sync ():
-SVr4, 4.3BSD, POSIX.1-2001.
-
+POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
+.PP
.BR syncfs ()
is Linux-specific.
.SH NOTES
-Since glibc 2.2.2 the Linux prototype for
+Since glibc 2.2.2, the Linux prototype for
.BR sync ()
is as listed above,
following the various standards.
-In libc4, libc5, and glibc up to 2.2.1
+In glibc 2.2.1 and earlier,
it was "int sync(void)", and
.BR sync ()
always returned 0.
-.SH BUGS
+.PP
According to the standard specification (e.g., POSIX.1-2001),
.BR sync ()
schedules the writes, but may return before the actual
-writing is done.
-However, since version 1.3.20 Linux does actually wait.
-(This still does not guarantee data integrity: modern disks have
-large caches.)
+writing is done. However Linux waits for I/O completions,
+and thus
+.BR sync ()
+or
+.BR syncfs ()
+provide the same guarantees as fsync called on every file in
+the system or filesystem respectively.
+.SH BUGS
+Before version 1.3.20 Linux did not wait for I/O to complete
+before returning.
.SH SEE ALSO
-.BR bdflush (2),
+.BR sync (1),
.BR fdatasync (2),
-.BR fsync (2),
-.BR sync (8)
+.BR fsync (2)