1 /* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
20 * ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output
29 #define __need_timespec
31 #include <sys/types.h>
35 /* Asynchronous I/O control block. */
38 int aio_fildes; /* File desriptor. */
39 int aio_lio_opcode; /* Operation to be performed. */
40 int aio_reqprio; /* Request priority offset. */
41 volatile void *aio_buf; /* Location of buffer. */
42 size_t aio_nbytes; /* Length of transfer. */
43 struct sigevent aio_sigevent; /* Signal number and value. */
45 /* Internal members. */
46 struct aiocb *__last_fd;
47 struct aiocb *__next_fd;
48 struct aiocb *__next_prio;
52 __ssize_t __return_value;
54 #ifndef __USE_FILE_OFFSET64
55 __off_t aio_offset; /* File offset. */
57 __off64_t aio_offset; /* File offset. */
62 /* The same for the 64bit offsets. */
63 #ifdef __USE_LARGEFILE64
66 int aio_fildes; /* File desriptor. */
67 int aio_lio_opcode; /* Operation to be performed. */
68 int aio_reqprio; /* Request priority offset. */
69 volatile void *aio_buf; /* Location of buffer. */
70 size_t aio_nbytes; /* Length of transfer. */
71 struct sigevent aio_sigevent; /* Signal number and value. */
73 /* Internal members. */
74 struct aiocb64 *__last_fd;
75 struct aiocb64 *__next_fd;
76 struct aiocb64 *__next_prio;
80 __ssize_t __return_value;
82 __off64_t aio_offset; /* File offset. */
88 /* Return values of cancelation function. */
92 #define AIO_CANCELED AIO_CANCELED
94 #define AIO_NOTCANCELED AIO_NOTCANCELED
96 #define AIO_ALLDONE AIO_ALLDONE
100 /* Operation codes for `aio_lio_opcode'. */
104 #define LIO_READ LIO_READ
106 #define LIO_WRITE LIO_WRITE
108 #define LIO_NOP LIO_NOP
111 __LIO_READ64 = LIO_READ | 128,
112 __LIO_WRITE64 = LIO_WRITE | 128
116 /* Synchronization options for `lio_listio' function. */
120 #define LIO_WAIT LIO_WAIT
122 #define LIO_NOWAIT LIO_NOWAIT
126 /* Enqueue read request for given number of bytes and the given priority. */
127 #ifndef __USE_FILE_OFFSET64
128 extern int aio_read __P ((struct aiocb *__aiocbp));
130 extern int aio_read __P ((struct aiocb *__aiocbp)) __asm__ ("aio_read64");
132 #ifdef __USE_LARGEFILE64
133 extern int aio_read64 __P ((struct aiocb64 *__aiocbp));
136 /* Enqueue write request for given number of bytes and the given priority. */
137 #ifndef __USE_FILE_OFFSET64
138 extern int aio_write __P ((struct aiocb *__aiocbp));
140 extern int aio_write __P ((struct aiocb *__aiocbp)) __asm__ ("aio_write64");
142 #ifdef __USE_LARGEFILE64
143 extern int aio_write64 __P ((struct aiocb64 *__aiocbp));
147 /* Initiate list of I/O requests. */
148 #ifndef __USE_FILE_OFFSET64
149 extern int lio_listio __P ((int __mode, struct aiocb *__const __list[],
150 int __nent, struct sigevent *__sig));
152 extern int lio_listio __P ((int __mode, struct aiocb *__const __list[],
153 int __nent, struct sigevent *__sig))
154 __asm__ ("lio_listio64");
156 #ifdef __USE_LARGEFILE64
157 extern int lio_listio64 __P ((int __mode, struct aiocb64 *__const __list[],
158 int __nent, struct sigevent *__sig));
162 /* Retrieve error status associated with AIOCBP. */
163 #ifndef __USE_FILE_OFFSET64
164 extern int aio_error __P ((__const struct aiocb *__aiocbp));
166 extern int aio_error __P ((__const struct aiocb *__aiocbp))
167 __asm__ ("aio_error64");;
169 #ifdef __USE_LARGEFILE64
170 extern int aio_error64 __P ((__const struct aiocb64 *__aiocbp));
174 /* Return status associated with AIOCBP. */
175 #ifndef __USE_FILE_OFFSET64
176 extern __ssize_t aio_return __P ((struct aiocb *__aiocbp));
178 extern __ssize_t aio_return __P ((struct aiocb *__aiocbp))
179 __asm__ ("aio_return64");
181 #ifdef __USE_LARGEFILE64
182 extern __ssize_t aio_return64 __P ((struct aiocb64 *__aiocbp));
186 /* Try to cancel asynchronous I/O requests outstanding against file
187 descriptot FILDES. */
188 #ifndef __USE_FILE_OFFSET64
189 extern int aio_cancel __P ((int __fildes, struct aiocb *__aiocbp));
191 extern int aio_cancel __P ((int __fildes, struct aiocb *__aiocbp))
192 __asm__ ("aio_cancel64");
194 #ifdef __USE_LARGEFILE64
195 extern int aio_cancel64 __P ((int __fildes, struct aiocb64 *__aiocbp));
199 /* Suspend calling thread until at least one of the asynchronous I/O
200 operations referenced by LIST has completed. */
201 #ifndef __USE_FILE_OFFSET64
202 extern int aio_suspend __P ((__const struct aiocb *__const __list[],
203 int __nent, __const struct timespec *__timeout));
205 extern int aio_suspend __P ((__const struct aiocb *__const __list[],
206 int __nent, __const struct timespec *__timeout))
207 __asm__ ("aio_suspend64");
209 #ifdef __USE_LARGEFILE64
210 extern int aio_suspend64 __P ((__const struct aiocb64 *__const __list[],
212 __const struct timespec *__timeout));
216 /* Force all operations associated with file desriptor described by
217 `aio_fildes' member of AIOCBP. */
218 #ifndef __USE_FILE_OFFSET64
219 extern int aio_fsync __P ((int __op, struct aiocb *__aiocbp));
221 extern int aio_fsync __P ((int __op, struct aiocb *__aiocbp))
222 __asm__ ("aio_fsync64");
224 #ifdef __USE_LARGEFILE64
225 extern int aio_fsync64 __P ((int __op, struct aiocb64 *__aiocbp));