.TH aio_fsync 3 2002-09-12 "Linux 2.4" Linux AIO" .SH NAME aio_fsync \- Synchronize a file's complete in-core state with that on disk .SH SYNOPSYS .nf .B #include .sp .br .B #include .sp .br .BI "int aio_fsync (int op, struct aiocb aiocbp)" .fi .SH DESCRIPTION .PP When dealing with asynchronous operations it is sometimes necessary to get into a consistent state. This would mean for AIO that one wants to know whether a certain request or a group of request were processed. This could be done by waiting for the notification sent by the system after the operation terminated, but this sometimes would mean wasting resources (mainly computation time). Instead POSIX.1b defines two functions which will help with most kinds of consistency. .PP The .IR aio_fsync and .IR "aio_fsync64" functions are only available if the symbol .IR "_POSIX_SYNCHRONIZED_IO" is defined in .I unistd.h . Calling this function forces all I/O operations operating queued at the time of the function call operating on the file descriptor .IR "aiocbp->aio_fildes" into the synchronized I/O completion state . The .IR "aio_fsync" function returns immediately but the notification through the method described in .IR "aiocbp->aio_sigevent" will happen only after all requests for this file descriptor have terminated and the file is synchronized. This also means that requests for this very same file descriptor which are queued after the synchronization request are not affected. If .IR "op" is .IR "O_DSYNC" the synchronization happens as with a call to .IR "fdatasync" . Otherwise .IR "op" should be .IR "O_SYNC" and the synchronization happens as with .IR "fsync" . As long as the synchronization has not happened, a call to .IR "aio_error" with the reference to the object pointed to by .IR "aiocbp" returns .IR "EINPROGRESS" . Once the synchronization is done .IR "aio_error" return .IR 0 if the synchronization was not successful. Otherwise the value returned is the value to which the .IR "fsync" or .IR "fdatasync" function would have set the .IR "errno" variable. In this case nothing can be assumed about the consistency for the data written to this file descriptor. .SH "RETURN VALUES" The return value of this function is .IR 0 if the request was successfully enqueued. Otherwise the return value is .IR -1 and .IR "errno". .SH ERRORS .TP .B EAGAIN The request could not be enqueued due to temporary lack of resources. .TP .B EBADF The file descriptor .IR "aiocbp->aio_fildes" is not valid or not open for writing. .TP .B EINVAL The implementation does not support I/O synchronization or the .IR "op" parameter is other than .IR "O_DSYNC" and .IR "O_SYNC" . .TP .B ENOSYS This function is not implemented. .PP When the sources are compiled with .IR "_FILE_OFFSET_BITS == 64" this function is in fact .IR "aio_return64" since the LFS interface transparently replaces the normal implementation. .SH "SEE ALSO" .BR aio(3), .BR aio_cancel(3), .BR aio_cancel64(3), .BR aio_error(3), .BR aio_error64(3), .BR aio_fsync64(3), .BR aio_init(3), .BR aio_read(3), .BR aio_read64(3), .BR aio_return(3), .BR aio_return64(3), .BR aio_suspend(3), .BR aio_suspend64(3), .BR aio_write(3), .BR aio_write64(3), .BR errno(3),