2004-11-03 13:51:07 +00:00
|
|
|
.\" Hey Emacs! This file is -*- nroff -*- source.
|
|
|
|
.\"
|
2006-04-27 23:31:05 +00:00
|
|
|
.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) and
|
2006-05-22 23:52:24 +00:00
|
|
|
.\" and Copyright 2006 Michael Kerrisk <mtk-manpages@gmx.net>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
|
|
|
.\" 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.
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
|
|
.\" permission notice identical to this one.
|
2007-04-12 22:42:49 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
|
|
.\" have taken the same level of care in the production of this manual,
|
|
|
|
.\" which is licensed free of charge, as they might when working
|
|
|
|
.\" professionally.
|
2007-04-12 22:42:49 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
|
|
.\"
|
|
|
|
.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
|
|
|
|
.\" Removed note about old libc (pre-4.5.26) translating to 'sync'.
|
|
|
|
.\" Modified 15 Apr 1995 by Michael Chastain <mec@shell.portal.com>:
|
|
|
|
.\" Added `see also' section.
|
|
|
|
.\" Modified 13 Apr 1996 by Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
|
|
|
|
.\" Added remarks about fdatasync.
|
|
|
|
.\" Modified 31 Jan 1997 by Eric S. Raymond <esr@thyrsus.com>
|
|
|
|
.\" Modified 18 Apr 2001 by Andi Kleen
|
|
|
|
.\" Fix description to describe what it really does; add a few caveats.
|
2006-04-27 23:31:05 +00:00
|
|
|
.\" 2006-04-28, mtk, substantial rewrite of various parts.
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
2006-04-27 23:31:05 +00:00
|
|
|
.TH FSYNC 2 2006-04-28 "Linux 1.3.85" "Linux Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
2006-04-27 23:31:05 +00:00
|
|
|
fsync, fdatasync \- synchronize a file's in-core state with storage device
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH SYNOPSIS
|
|
|
|
.B #include <unistd.h>
|
|
|
|
.sp
|
|
|
|
.BI "int fsync(int " fd );
|
|
|
|
.sp
|
|
|
|
.BI "int fdatasync(int " fd );
|
|
|
|
.SH DESCRIPTION
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR fsync ()
|
2007-04-12 22:42:49 +00:00
|
|
|
transfers ("flushes") all modified in-core data of
|
|
|
|
(i.e., modified buffer cache pages for) the
|
2006-04-27 23:31:05 +00:00
|
|
|
file referred to by the file descriptor
|
|
|
|
.I fd
|
2007-04-12 22:42:49 +00:00
|
|
|
to the disk device (or other permanent storage device)
|
2006-04-27 23:31:05 +00:00
|
|
|
where that file resides.
|
|
|
|
The call blocks until the device reports that the transfer has completed.
|
|
|
|
It also flushes metadata information associated with the file (see
|
2007-04-12 22:42:49 +00:00
|
|
|
.BR stat (2)).
|
2006-04-27 23:31:05 +00:00
|
|
|
|
|
|
|
Calling
|
|
|
|
.BR fsync ()
|
|
|
|
does not necessarily ensure
|
2004-11-03 13:51:07 +00:00
|
|
|
that the entry in the directory containing the file has also reached disk.
|
|
|
|
For that an explicit
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR fsync ()
|
2006-04-27 23:31:05 +00:00
|
|
|
on a file descriptor for the directory is also needed.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR fdatasync ()
|
2007-04-12 22:42:49 +00:00
|
|
|
is similar to
|
2006-04-27 23:31:05 +00:00
|
|
|
.BR fsync (),
|
2007-04-12 22:42:49 +00:00
|
|
|
but does not flush modified metadata unless that metadata
|
2006-04-27 23:31:05 +00:00
|
|
|
is needed in order to allow a subsequent data retrieval to be
|
|
|
|
correctly handled.
|
2007-04-12 22:42:49 +00:00
|
|
|
For example, changes to
|
|
|
|
.I st_atime
|
|
|
|
or
|
2006-04-27 23:31:05 +00:00
|
|
|
.I st_mtime
|
2005-07-19 07:15:17 +00:00
|
|
|
(respectively, time of last access and
|
|
|
|
time of last modification; see
|
2007-04-12 22:42:49 +00:00
|
|
|
.BR stat (2))
|
2007-03-01 01:12:16 +00:00
|
|
|
do not require flushing because they are not necessary for
|
2006-04-27 23:31:05 +00:00
|
|
|
a subsequent data read to be handled correctly.
|
|
|
|
On the other hand, a change to the file size
|
|
|
|
.RI ( st_size ,
|
|
|
|
as made by say
|
|
|
|
.BR ftruncate (2)),
|
|
|
|
would require a metadata flush.
|
|
|
|
|
|
|
|
The aim of
|
|
|
|
.BR fdatasync (2)
|
|
|
|
is to reduce disk activity for applications that do not
|
|
|
|
require all metadata to be synchronised with the disk.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH "RETURN VALUE"
|
2007-04-12 22:42:49 +00:00
|
|
|
On success, zero is returned.
|
|
|
|
On error, \-1 is returned, and
|
2004-11-03 13:51:07 +00:00
|
|
|
.I errno
|
|
|
|
is set appropriately.
|
|
|
|
.SH ERRORS
|
|
|
|
.TP
|
|
|
|
.B EBADF
|
|
|
|
.I fd
|
|
|
|
is not a valid file descriptor open for writing.
|
|
|
|
.TP
|
|
|
|
.B EIO
|
|
|
|
An error occurred during synchronization.
|
|
|
|
.TP
|
|
|
|
.BR EROFS ", " EINVAL
|
|
|
|
.I fd
|
|
|
|
is bound to a special file which does not support synchronization.
|
|
|
|
.SH NOTES
|
2006-04-27 23:31:05 +00:00
|
|
|
If the underlying hard disk has write caching enabled, then
|
2004-11-03 13:51:07 +00:00
|
|
|
the data may not really be on permanent storage when
|
2007-04-12 22:42:49 +00:00
|
|
|
.BR fsync ()
|
|
|
|
/
|
2005-10-19 16:30:05 +00:00
|
|
|
.BR fdatasync ()
|
2004-11-03 13:51:07 +00:00
|
|
|
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
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR fsync ().
|
2004-11-03 13:51:07 +00:00
|
|
|
.LP
|
|
|
|
On kernels before 2.4,
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR fsync ()
|
2004-11-03 13:51:07 +00:00
|
|
|
on big files can be inefficient.
|
|
|
|
An alternative might be to use the
|
|
|
|
.I O_SYNC
|
|
|
|
flag to
|
|
|
|
.BR open (2).
|
|
|
|
.SH "CONFORMING TO"
|
2006-12-18 00:46:28 +00:00
|
|
|
4.3BSD, POSIX.1-2001
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR bdflush (2),
|
|
|
|
.BR open (2),
|
2005-07-19 07:15:17 +00:00
|
|
|
.BR sync (2),
|
2006-07-06 09:34:33 +00:00
|
|
|
.BR sync_file_range (2),
|
2006-04-27 23:39:55 +00:00
|
|
|
.BR hdparm (8),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR mount (8),
|
|
|
|
.BR sync (8),
|
|
|
|
.BR update (8)
|