Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
FSYNC(2)		      System Calls Manual		      FSYNC(2)

NAME
       fsync --	synchronize a file's in-core state with	that on	disk

SYNOPSIS
       #include	<unistd.h>

       int
       fsync(int fd);

DESCRIPTION
       Fsync()	causes all modified data and attributes	of fd to be moved to a
       permanent storage device.  This normally	results	in all	in-core	 modi-
       fied copies of buffers for the associated file to be written to a disk.

       Note  that while	fsync()	will flush all data from the host to the drive
       (i.e. the "permanent storage device"), the drive	itself may not	physi-
       cally  write the	data to	the platters for quite some time and it	may be
       written in an out-of-order sequence.

       Specifically, if	the drive loses	power or the OS	crashes, the  applica-
       tion  may  find	that only some or none of their	data was written.  The
       disk drive may also re-order the	data  so  that	later  writes  may  be
       present while earlier writes are	not.

       This  is	 not  a	theoretical edge case.	This scenario is easily	repro-
       duced with real world workloads and drive power failures.

       For applications	that require tighter guarantess	about the integrity of
       their data, MacOS X provides the	F_FULLFSYNC  fcntl.   The  F_FULLFSYNC
       fcntl  asks  the	drive to flush all buffered data to permanent storage.
       Applications such as databases that require a strict ordering of	writes
       should use F_FULLFSYNC to ensure	their data is  written	in  the	 order
       they expect.  Please see	fcntl(2) for more detail.

RETURN VALUES
       A 0 value is returned on	success.  A -1 value indicates an error.

ERRORS
       The fsync() fails if:

       [EBADF]		  fd is	not a valid descriptor.

       [EINVAL]		  fd refers to a socket, not to	a file.

       [EIO]		  An  I/O error	occurred while reading from or writing
			  to the file system.

SEE ALSO
       sync(2),	sync(8), update(8), fcntl(2)

HISTORY
       The fsync() function call appeared in 4.2BSD.

4.2 Berkeley Distribution	 June 4, 1993			      FSYNC(2)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=fsync&manpath=Darwin+8.0.1%2fppc>

home | help