The fsync() function causes all modified data and
attributes of 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() function is similar to
fsync() except that it only guarantees modified
data (and metadata necessary to read that data) is committed to storage. Other
file modifications may be left unsynchronized.

fsync() and
fdatasync() should be used by programs that
require a file to be in a known state, for example, in building a simple
transaction facility.