xref: /dflybsd-src/lib/librt/aio_write.3 (revision 98b3d9adc9c22415cb65dea171616322211baa7a)
1d5c710e6SSascha Wildner.\" Copyright (c) 1999 Softweyr LLC.
2d5c710e6SSascha Wildner.\" All rights reserved.
3d5c710e6SSascha Wildner.\"
4d5c710e6SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
5d5c710e6SSascha Wildner.\" modification, are permitted provided that the following conditions
6d5c710e6SSascha Wildner.\" are met:
7d5c710e6SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
8d5c710e6SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
9d5c710e6SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
10d5c710e6SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
11d5c710e6SSascha Wildner.\"    documentation and/or other materials provided with the distribution.
12d5c710e6SSascha Wildner.\"
13d5c710e6SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY Softweyr LLC AND CONTRIBUTORS ``AS IS'' AND
14d5c710e6SSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15d5c710e6SSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16d5c710e6SSascha Wildner.\" ARE DISCLAIMED.  IN NO EVENT SHALL Softweyr LLC OR CONTRIBUTORS BE LIABLE
17d5c710e6SSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18d5c710e6SSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19d5c710e6SSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20d5c710e6SSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21d5c710e6SSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22d5c710e6SSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23d5c710e6SSascha Wildner.\" SUCH DAMAGE.
24d5c710e6SSascha Wildner.\"
25d5c710e6SSascha Wildner.\" $FreeBSD: src/lib/libc/sys/aio_write.2,v 1.4.2.5 2001/12/14 18:34:00 ru Exp $
26d5c710e6SSascha Wildner.\"
27d5c710e6SSascha Wildner.Dd June 2, 1999
28d5c710e6SSascha Wildner.Dt AIO_WRITE 3
29d5c710e6SSascha Wildner.Os
30d5c710e6SSascha Wildner.Sh NAME
31d5c710e6SSascha Wildner.Nm aio_write
32d5c710e6SSascha Wildner.Nd asynchronous write to a file (REALTIME)
33d5c710e6SSascha Wildner.Sh LIBRARY
34d5c710e6SSascha Wildner.Lb librt
35d5c710e6SSascha Wildner.Sh SYNOPSIS
36d5c710e6SSascha Wildner.In aio.h
37d5c710e6SSascha Wildner.Ft int
38d5c710e6SSascha Wildner.Fn aio_write "struct aiocb *iocb"
39d5c710e6SSascha Wildner.Sh DESCRIPTION
40d5c710e6SSascha WildnerThe
41d5c710e6SSascha Wildner.Fn aio_write
42d5c710e6SSascha Wildnerfunction allows the calling process to write
43d5c710e6SSascha Wildner.Fa iocb->aio_nbytes
44d5c710e6SSascha Wildnerfrom the buffer pointed to by
45d5c710e6SSascha Wildner.Fa iocb->aio_buf
46d5c710e6SSascha Wildnerto the descriptor
47d5c710e6SSascha Wildner.Fa iocb->aio_fildes .
485fda1bb4SSascha WildnerThe function returns immediately after the write request has been enqueued
49d5c710e6SSascha Wildnerto the descriptor; the write may or may not have completed at the time
505fda1bb4SSascha Wildnerthe function returns.
515fda1bb4SSascha WildnerIf the request could not be enqueued, generally due
525fda1bb4SSascha Wildnerto invalid arguments, the function returns without having enqueued the
53d5c710e6SSascha Wildnerrequest.
54d5c710e6SSascha Wildner.Pp
55d5c710e6SSascha WildnerIf
56d5c710e6SSascha Wildner.Dv O_APPEND
57d5c710e6SSascha Wildneris set for
58d5c710e6SSascha Wildner.Fa iocb->aio_fildes ,
59d5c710e6SSascha Wildner.Fn aio_write
60d5c710e6SSascha Wildneroperations append to the file in the same order as the calls were
615fda1bb4SSascha Wildnermade.
625fda1bb4SSascha WildnerIf
63d5c710e6SSascha Wildner.Dv O_APPEND
64d5c710e6SSascha Wildneris not set for the file descriptor, the write operation will occur at
65d5c710e6SSascha Wildnerthe absolute position from the beginning of the file plus
66d5c710e6SSascha Wildner.Fa iocb->aio_offset .
67d5c710e6SSascha Wildner.Pp
68d5c710e6SSascha WildnerIf
69d5c710e6SSascha Wildner.Dv _POSIX_PRIORITIZED_IO
70d5c710e6SSascha Wildneris defined, and the descriptor supports it, then the enqueued
71d5c710e6SSascha Wildneroperation is submitted at a priority equal to that of the calling
72d5c710e6SSascha Wildnerprocess minus
73d5c710e6SSascha Wildner.Fa iocb->aio_reqprio .
74d5c710e6SSascha Wildner.Pp
75d5c710e6SSascha WildnerThe
76d5c710e6SSascha Wildner.Fa iocb
77d5c710e6SSascha Wildnerpointer may be subsequently used as an argument to
78d5c710e6SSascha Wildner.Fn aio_return
79d5c710e6SSascha Wildnerand
80d5c710e6SSascha Wildner.Fn aio_error
81d5c710e6SSascha Wildnerin order to determine return or error status for the enqueued operation
82d5c710e6SSascha Wildnerwhile it is in progress.
83d5c710e6SSascha Wildner.Pp
84d5c710e6SSascha WildnerIf the request is successfully enqueued, the value of
85d5c710e6SSascha Wildner.Fa iocb->aio_offset
86d5c710e6SSascha Wildnercan be modified during the request as context, so this value must not
87d5c710e6SSascha Wildnerbe referenced after the request is enqueued.
88d5c710e6SSascha Wildner.Sh RESTRICTIONS
89d5c710e6SSascha WildnerThe Asynchronous I/O Control Block structure pointed to by
90d5c710e6SSascha Wildner.Fa iocb
91d5c710e6SSascha Wildnerand the buffer that the
92d5c710e6SSascha Wildner.Fa iocb->aio_buf
93d5c710e6SSascha Wildnermember of that structure references must remain valid until the
945fda1bb4SSascha Wildneroperation has completed.
955fda1bb4SSascha WildnerFor this reason, use of auto (stack) variables
96d5c710e6SSascha Wildnerfor these objects is discouraged.
97d5c710e6SSascha Wildner.Pp
98d5c710e6SSascha WildnerThe asynchronous I/O control buffer
99d5c710e6SSascha Wildner.Fa iocb
100d5c710e6SSascha Wildnershould be zeroed before the
101d5c710e6SSascha Wildner.Fn aio_write
1025fda1bb4SSascha Wildnerfunction.
103d5c710e6SSascha Wildner.Pp
104d5c710e6SSascha WildnerModifications of the Asynchronous I/O Control Block structure or the
105d5c710e6SSascha Wildnerbuffer contents after the request has been enqueued, but before the
106d5c710e6SSascha Wildnerrequest has completed, are not allowed.
107d5c710e6SSascha Wildner.Pp
108d5c710e6SSascha WildnerIf the file offset in
109d5c710e6SSascha Wildner.Fa iocb->aio_offset
110d5c710e6SSascha Wildneris past the offset maximum  for
111d5c710e6SSascha Wildner.Fa iocb->aio_fildes ,
112d5c710e6SSascha Wildnerno I/O will occur.
113d5c710e6SSascha Wildner.Sh RETURN VALUES
114d5c710e6SSascha Wildner.Rv -std aio_write
115d5c710e6SSascha Wildner.Sh ERRORS
116d5c710e6SSascha WildnerThe
117d5c710e6SSascha Wildner.Fn aio_write
118d5c710e6SSascha Wildnerfunction will fail if:
119d5c710e6SSascha Wildner.Bl -tag -width Er
120d5c710e6SSascha Wildner.It Bq Er EAGAIN
121d5c710e6SSascha WildnerThe request was not queued because of system resource limitations.
122d5c710e6SSascha Wildner.It Bq Er ENOSYS
123d5c710e6SSascha WildnerThe
124d5c710e6SSascha Wildner.Fn aio_write
1255fda1bb4SSascha Wildnerfunction is not supported.
126d5c710e6SSascha Wildner.El
127d5c710e6SSascha Wildner.Pp
128d5c710e6SSascha WildnerThe following conditions may be synchronously detected when the
129d5c710e6SSascha Wildner.Fn aio_write
1305fda1bb4SSascha Wildnerfunction is made, or asynchronously, at any time thereafter.
1315fda1bb4SSascha WildnerIf they are detected at call time,
132d5c710e6SSascha Wildner.Fn aio_write
133d5c710e6SSascha Wildnerreturns -1 and sets
134d5c710e6SSascha Wildner.Va errno
135d5c710e6SSascha Wildnerappropriately; otherwise the
136d5c710e6SSascha Wildner.Fn aio_return
137d5c710e6SSascha Wildnerfunction must be called, and will return -1, and
138d5c710e6SSascha Wildner.Fn aio_error
139d5c710e6SSascha Wildnermust be called to determine the actual value that would have been
140d5c710e6SSascha Wildnerreturned in
141d5c710e6SSascha Wildner.Va errno .
142d5c710e6SSascha Wildner.Bl -tag -width Er
143d5c710e6SSascha Wildner.It Bq Er EBADF
144d5c710e6SSascha Wildner.Fa iocb->aio_fildes
145d5c710e6SSascha Wildneris invalid, or is not opened for writing.
146d5c710e6SSascha Wildner.It Bq Er EINVAL
147d5c710e6SSascha WildnerThe offset
148d5c710e6SSascha Wildner.Fa iocb->aio_offset
149d5c710e6SSascha Wildneris not valid, the priority specified by
150d5c710e6SSascha Wildner.Fa iocb->aio_reqprio
151d5c710e6SSascha Wildneris not a valid priority, or the number of bytes specified by
152d5c710e6SSascha Wildner.Fa iocb->aio_nbytes
153d5c710e6SSascha Wildneris not valid.
154d5c710e6SSascha Wildner.El
155d5c710e6SSascha Wildner.Pp
156d5c710e6SSascha WildnerIf the request is successfully enqueued, but subsequently canceled
157d5c710e6SSascha Wildneror an error occurs, the value returned by the
158d5c710e6SSascha Wildner.Fn aio_return
159d5c710e6SSascha Wildnerfunction is per the
160d5c710e6SSascha Wildner.Xr write 2
161d5c710e6SSascha Wildnercall, and the value returned by the
162d5c710e6SSascha Wildner.Fn aio_error
163d5c710e6SSascha Wildnerfunction is either one of the error returns from the
164d5c710e6SSascha Wildner.Xr write 2
165d5c710e6SSascha Wildnercall, or one of:
166d5c710e6SSascha Wildner.Bl -tag -width Er
167d5c710e6SSascha Wildner.It Bq Er EBADF
168d5c710e6SSascha Wildner.Fa iocb->aio_fildes
169d5c710e6SSascha Wildneris invalid for writing.
170d5c710e6SSascha Wildner.It Bq Er ECANCELED
171d5c710e6SSascha WildnerThe request was explicitly canceled via a call to
172d5c710e6SSascha Wildner.Fn aio_cancel .
173d5c710e6SSascha Wildner.It Bq Er EINVAL
174d5c710e6SSascha WildnerThe offset
175d5c710e6SSascha Wildner.Fa iocb->aio_offset
176d5c710e6SSascha Wildnerwould be invalid.
177d5c710e6SSascha Wildner.El
178d5c710e6SSascha Wildner.Sh STANDARDS
179d5c710e6SSascha Wildner.Fn aio_write
180d5c710e6SSascha Wildneris expected to conform to the
181d5c710e6SSascha Wildner.St -p1003.2
182d5c710e6SSascha Wildnerstandard.
183d5c710e6SSascha Wildner.Sh HISTORY
184d5c710e6SSascha WildnerThe
185d5c710e6SSascha Wildner.Nm
186d5c710e6SSascha Wildnerfunction first appeared in
187d5c710e6SSascha Wildner.Fx 3.0 .
188d5c710e6SSascha Wildner.Sh AUTHORS
189d5c710e6SSascha WildnerThis manual page was written by
190*98b3d9adSFranco Fichtner.An Wes Peters Aq Mt wes@softweyr.com .
191eb0d1630SSascha Wildner.Sh BUGS
192eb0d1630SSascha WildnerAsynchronous I/O operations cannot be canceled in this implementation.
193