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.Dd January 6, 2021 26.Dt AIO_FSYNC 2 27.Os 28.Sh NAME 29.Nm aio_fsync 30.Nd asynchronous file synchronization (REALTIME) 31.Sh LIBRARY 32.Lb libc 33.Sh SYNOPSIS 34.In aio.h 35.Ft int 36.Fn aio_fsync "int op" "struct aiocb *iocb" 37.Sh DESCRIPTION 38The 39.Fn aio_fsync 40system call allows the calling process to move all modified data 41associated with the descriptor 42.Fa iocb->aio_fildes 43to a permanent storage device. 44The call returns immediately after the synchronization request has been 45enqueued to the descriptor; the synchronization may or may not have 46completed at the time the call returns. 47.Pp 48The 49.Fa op 50argument can be set to 51.Dv O_SYNC 52to cause all currently queued I/O operations to be completed 53as if by a call to 54.Xr fsync 2 , 55or 56.Dv O_DSYNC 57for the behavior of 58.Xr fdatasync 2 . 59.Pp 60If _POSIX_PRIORITIZED_IO is defined, and the descriptor supports it, 61then the enqueued operation is submitted at a priority equal to that 62of the calling process minus 63.Fa iocb->aio_reqprio . 64.Pp 65The 66.Fa iocb 67pointer may be subsequently used as an argument to 68.Fn aio_return 69and 70.Fn aio_error 71in order to determine return or error status for the enqueued operation 72while it is in progress. 73.Pp 74If the request could not be enqueued (generally due to invalid arguments), 75the call returns without having enqueued the request. 76.Pp 77The 78.Fa iocb->aio_sigevent 79structure can be used to request notification of the operation's 80completion as described in 81.Xr aio 4 . 82.Sh RESTRICTIONS 83The Asynchronous I/O Control Block structure pointed to by 84.Fa iocb 85must remain valid until the 86operation has completed. 87.Pp 88The asynchronous I/O control buffer 89.Fa iocb 90should be zeroed before the 91.Fn aio_fsync 92call to avoid passing bogus context information to the kernel. 93.Pp 94Modification of the Asynchronous I/O Control Block structure is not allowed 95while the request is queued. 96.Sh RETURN VALUES 97.Rv -std aio_fsync 98.Sh ERRORS 99The 100.Fn aio_fsync 101system call will fail if: 102.Bl -tag -width Er 103.It Bq Er EAGAIN 104The request was not queued because of system resource limitations. 105.It Bq Er EINVAL 106The asynchronous notification method in 107.Fa iocb->aio_sigevent.sigev_notify 108is invalid or not supported. 109.It Bq Er EOPNOTSUPP 110Asynchronous file synchronization operations on the file descriptor 111.Fa iocb->aio_fildes 112are unsafe and unsafe asynchronous I/O operations are disabled. 113.It Bq Er EINVAL 114A value of the 115.Fa op 116argument is not set to 117.Dv O_SYNC 118or 119.Dv O_DSYNC . 120.El 121.Pp 122The following conditions may be synchronously detected when the 123.Fn aio_fsync 124system call is made, or asynchronously, at any time thereafter. 125If they are detected at call time, 126.Fn aio_fsync 127returns -1 and sets 128.Va errno 129appropriately; otherwise the 130.Fn aio_return 131system call must be called, and will return -1, and 132.Fn aio_error 133must be called to determine the actual value that would have been 134returned in 135.Va errno . 136.Bl -tag -width Er 137.It Bq Er EBADF 138The 139.Fa iocb->aio_fildes 140argument 141is not a valid descriptor. 142.It Bq Er EINVAL 143This implementation does not support synchronized I/O for this file. 144.El 145.Pp 146If the request is successfully enqueued, but subsequently cancelled 147or an error occurs, the value returned by the 148.Fn aio_return 149system call is per the 150.Xr read 2 151and 152.Xr write 2 153system calls, and the value returned by the 154.Fn aio_error 155system call is one of the error returns from the 156.Xr read 2 157or 158.Xr write 2 159system calls. 160.Sh SEE ALSO 161.Xr aio_cancel 2 , 162.Xr aio_error 2 , 163.Xr aio_read 2 , 164.Xr aio_return 2 , 165.Xr aio_suspend 2 , 166.Xr aio_waitcomplete 2 , 167.Xr aio_write 2 , 168.Xr fsync 2 , 169.Xr sigevent 3 , 170.Xr siginfo 3 , 171.Xr aio 4 172.Sh STANDARDS 173The 174.Fn aio_fsync 175system call is expected to conform to the 176.St -p1003.1 177standard. 178.Sh HISTORY 179The 180.Fn aio_fsync 181system call first appeared in 182.Fx 7.0 . 183The 184.Dv O_DSYNC 185option appeared in 186.Fx 13.0 . 187