1.\" Copyright (c) 2013 Sergey Kandaurov 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" 25.\" $FreeBSD$ 26.\" 27.Dd August 19, 2016 28.Dt AIO_FSYNC 2 29.Os 30.Sh NAME 31.Nm aio_fsync 32.Nd asynchronous file synchronization (REALTIME) 33.Sh LIBRARY 34.Lb libc 35.Sh SYNOPSIS 36.In aio.h 37.Ft int 38.Fn aio_fsync "int op" "struct aiocb *iocb" 39.Sh DESCRIPTION 40The 41.Fn aio_fsync 42system call allows the calling process to move all modified data 43associated with the descriptor 44.Fa iocb->aio_fildes 45to a permanent storage device. 46The call returns immediately after the synchronization request has been 47enqueued to the descriptor; the synchronization may or may not have 48completed at the time the call returns. 49.Pp 50The 51.Fa op 52argument can only be set to 53.Dv O_SYNC 54to cause all currently queued I/O operations to be completed 55as if by a call to 56.Xr fsync 2 . 57.Pp 58If _POSIX_PRIORITIZED_IO is defined, and the descriptor supports it, 59then the enqueued operation is submitted at a priority equal to that 60of the calling process minus 61.Fa iocb->aio_reqprio . 62.Pp 63The 64.Fa iocb 65pointer may be subsequently used as an argument to 66.Fn aio_return 67and 68.Fn aio_error 69in order to determine return or error status for the enqueued operation 70while it is in progress. 71.Pp 72If the request could not be enqueued (generally due to invalid arguments), 73the call returns without having enqueued the request. 74.Pp 75The 76.Fa iocb->aio_sigevent 77structure can be used to request notification of the operation's 78completion as described in 79.Xr aio 4 . 80.Sh RESTRICTIONS 81The Asynchronous I/O Control Block structure pointed to by 82.Fa iocb 83must remain valid until the 84operation has completed. 85.Pp 86The asynchronous I/O control buffer 87.Fa iocb 88should be zeroed before the 89.Fn aio_fsync 90call to avoid passing bogus context information to the kernel. 91.Pp 92Modification of the Asynchronous I/O Control Block structure is not allowed 93while the request is queued. 94.Sh RETURN VALUES 95.Rv -std aio_fsync 96.Sh ERRORS 97The 98.Fn aio_fsync 99system call will fail if: 100.Bl -tag -width Er 101.It Bq Er EAGAIN 102The request was not queued because of system resource limitations. 103.It Bq Er EINVAL 104The asynchronous notification method in 105.Fa iocb->aio_sigevent.sigev_notify 106is invalid or not supported. 107.It Bq Er EOPNOTSUPP 108Asynchronous file synchronization operations on the file descriptor 109.Fa iocb->aio_fildes 110are unsafe and unsafe asynchronous I/O operations are disabled. 111.It Bq Er EINVAL 112A value of the 113.Fa op 114argument is not set to 115.Dv O_SYNC . 116.El 117.Pp 118The following conditions may be synchronously detected when the 119.Fn aio_fsync 120system call is made, or asynchronously, at any time thereafter. 121If they are detected at call time, 122.Fn aio_fsync 123returns -1 and sets 124.Va errno 125appropriately; otherwise the 126.Fn aio_return 127system call must be called, and will return -1, and 128.Fn aio_error 129must be called to determine the actual value that would have been 130returned in 131.Va errno . 132.Bl -tag -width Er 133.It Bq Er EBADF 134The 135.Fa iocb->aio_fildes 136argument 137is not a valid descriptor. 138.It Bq Er EINVAL 139This implementation does not support synchronized I/O for this file. 140.El 141.Pp 142If the request is successfully enqueued, but subsequently cancelled 143or an error occurs, the value returned by the 144.Fn aio_return 145system call is per the 146.Xr read 2 147and 148.Xr write 2 149system calls, and the value returned by the 150.Fn aio_error 151system call is one of the error returns from the 152.Xr read 2 153or 154.Xr write 2 155system calls. 156.Sh SEE ALSO 157.Xr aio_cancel 2 , 158.Xr aio_error 2 , 159.Xr aio_read 2 , 160.Xr aio_return 2 , 161.Xr aio_suspend 2 , 162.Xr aio_waitcomplete 2 , 163.Xr aio_write 2 , 164.Xr fsync 2 , 165.Xr sigevent 3 , 166.Xr siginfo 3 , 167.Xr aio 4 168.Sh STANDARDS 169The 170.Fn aio_fsync 171system call is expected to conform to the 172.St -p1003.1 173standard. 174.Sh HISTORY 175The 176.Fn aio_fsync 177system call first appeared in 178.Fx 7.0 . 179