The
fsync()
system call
causes all modified data and attributes of the file referenced by
the file descriptor
fd
to be moved to a permanent storage device.
This normally results in all in-core modified copies
of buffers for the associated file to be written to a disk.
The
fdatasync()
system call causes all modified data of
fd
to be moved to a permanent storage device.
Unlike
fsync(),
the system call does not guarantee that file attributes or
metadata necessary to access the file are committed to the permanent storage.
The
fsync()
system call
should be used by programs that require a file to be
in a known state, for example, in building a simple transaction
facility.
If the file metadata has already been committed, using
fdatasync()
can be more efficient than
fsync().
Both
fdatasync()
and
fsync()
calls are cancellation points.