X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/55e303ae13a4cf49d70f2294092726f2fffb9ef2..935ed37a5c468c8a1c07408573c08b8b7ef80e8b:/bsd/man/man2/fsync.2 diff --git a/bsd/man/man2/fsync.2 b/bsd/man/man2/fsync.2 index 7d72c2599..ad72f78de 100644 --- a/bsd/man/man2/fsync.2 +++ b/bsd/man/man2/fsync.2 @@ -42,38 +42,83 @@ .Sh SYNOPSIS .Fd #include .Ft int -.Fn fsync "int fd" +.Fo fsync +.Fa "int fildes" +.Fc .Sh DESCRIPTION .Fn Fsync causes all modified data and attributes of -.Fa fd +.Fa fildes 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. .Pp -.Fn Fsync -should be used by programs that require a file to be -in a known state, for example, in building a simple transaction -facility. +Note that while +.Fn fsync +will flush all data from the host to the drive +(i.e. the "permanent storage device"), +the drive itself may not physically write the data +to the platters for quite some time +and it may be written in an out-of-order sequence. +.Pp +Specifically, if the drive loses power +or the OS crashes, +the application 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. +.Pp +This is not a theoretical edge case. +This scenario is easily reproduced with real world workloads +and drive power failures. +.Pp +For applications that require tighter guarantees +about the integrity of their data, +Mac OS 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 that their data +is written in the order they expect. +Please see +.Xr fcntl 2 +for more detail. +.Pp .Sh RETURN VALUES -A 0 value is returned on success. A -1 value indicates -an error. +.Rv -std fsync .Sh ERRORS The .Fn fsync -fails if: +system call will fail if: .Bl -tag -width Er +.\" ========== .It Bq Er EBADF -.Fa fd +.Fa fildes is not a valid descriptor. +.\" ========== +.It Bq Er EINTR +Its execution is interrupted by a signal. +.\" ========== .It Bq Er EINVAL -.Fa fd -refers to a socket, not to a file. +.Fa fildes +refers to a file type (e.g., a socket) +that does not support this operation. +.\" ========== .It Bq Er EIO An I/O error occurred while reading from or writing to the file system. .El +.Pp +If a queued I/O operation fails, +.Fn fsync +may fail with any of the errors defined for +.Xr read 2 +or +.Xr write 2 . .Sh SEE ALSO +.Xr fcntl 2 , +.Xr read 2 , .Xr sync 2 , +.Xr write 2 , .Xr sync 8 , .Xr update 8 .Sh HISTORY