summaryrefslogtreecommitdiff
path: root/include/aio.h
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-09-09 01:07:38 -0400
committerRich Felker <dalias@aerifal.cx>2011-09-09 01:07:38 -0400
commitb4de6f93aed733b8fc8d103e5ced69ebe7d659e6 (patch)
tree33664a468c80b6b37a079d7d9bdbadf5adf4f93c /include/aio.h
parent96cea94ad258be262ecf15b33d13cf775e59720d (diff)
downloadmusl-b4de6f93aed733b8fc8d103e5ced69ebe7d659e6.tar.gz
implement POSIX asynchronous io
some features are not yet supported, and only minimal testing has been performed. should be considered experimental at this point.
Diffstat (limited to 'include/aio.h')
-rw-r--r--include/aio.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/include/aio.h b/include/aio.h
new file mode 100644
index 00000000..893c0e9e
--- /dev/null
+++ b/include/aio.h
@@ -0,0 +1,60 @@
+#ifndef _AIO_H
+#define _AIO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
+ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
+
+#include <signal.h>
+#include <time.h>
+
+#define __NEED_ssize_t
+#define __NEED_off_t
+
+#include <bits/alltypes.h>
+
+struct aiocb {
+ int aio_filedes, aio_lio_opcode, aio_reqprio;
+ volatile void *aio_buf;
+ size_t aio_nbytes;
+ struct sigevent aio_sigevent;
+ void *__td;
+ int __lock[2];
+ int __err;
+ ssize_t __ret;
+ off_t aio_offset;
+ void *__next, *__prev;
+ char __dummy4[32-2*sizeof(void *)];
+};
+
+#define AIO_CANCELED 0
+#define AIO_NOTCANCELED 1
+#define AIO_ALLDONE 2
+
+#define LIO_READ 0
+#define LIO_WRITE 1
+#define LIO_NOP 2
+
+#define LIO_WAIT 0
+#define LIO_NOWAIT 1
+
+int aio_read(struct aiocb *);
+int aio_write(struct aiocb *);
+int aio_error(struct aiocb *);
+ssize_t aio_return(struct aiocb *);
+int aio_cancel(int, struct aiocb *);
+int aio_suspend(struct aiocb *const [], int, const struct timespec *);
+int aio_fsync(int, struct aiocb *);
+
+int lio_listio(int, struct aiocb *const [], int, struct sigevent *);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif