mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
140 lines
3.2 KiB
Plaintext
140 lines
3.2 KiB
Plaintext
.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 <errno.h>
|
|
.sp
|
|
.br
|
|
.B #include <aio.h>
|
|
.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),
|