[PATCH] Posix asynchronous I/O support, part 2
Mark Geisert
mark@maxrnd.com
Thu Mar 29 05:32:00 GMT 2018
---
winsup/cygwin/include/aio.h | 78 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 78 insertions(+)
create mode 100644 winsup/cygwin/include/aio.h
diff --git a/winsup/cygwin/include/aio.h b/winsup/cygwin/include/aio.h
new file mode 100644
index 000000000..d6ca56517
--- /dev/null
+++ b/winsup/cygwin/include/aio.h
@@ -0,0 +1,78 @@
+/* aio.h: Support for Posix asynchronous i/o routines.
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _AIO_H
+#define _AIO_H
+
+#include <sys/features.h>
+#include <sys/signal.h>
+#include <sys/types.h>
+#include <limits.h> // for AIO_LISTIO_MAX, AIO_MAX, and AIO_PRIO_DELTA_MAX
+
+/* defines for return value of aio_cancel() */
+#define AIO_ALLDONE 0
+#define AIO_CANCELED 1
+#define AIO_NOTCANCELED 2
+
+/* defines for 'mode' argument of lio_listio() */
+#define LIO_NOWAIT 0
+#define LIO_WAIT 1
+
+/* defines for 'aio_lio_opcode' element of struct aiocb */
+#define LIO_NOP 0
+#define LIO_READ 1
+#define LIO_WRITE 2
+
+#ifdef __cplusplus
+#define restrict /* meaningless in C++ */
+extern "C" {
+#endif
+
+/* struct liocb is Cygwin-specific */
+struct liocb {
+ volatile int lio_count;
+ struct sigevent *lio_sigevent;
+};
+
+/* struct aiocb is defined by Posix */
+struct aiocb {
+ /* these elements of aiocb are Cygwin-specific */
+ struct aiocb *aio_prev;
+ struct aiocb *aio_next;
+ struct liocb *aio_liocb;
+ ssize_t aio_rbytes;
+ int aio_errno;
+ /* the remaining elements of aiocb are defined by Posix */
+ int aio_lio_opcode;
+ int aio_reqprio;
+ int aio_fildes;
+ volatile void *aio_buf;
+ size_t aio_nbytes;
+ off_t aio_offset;
+ struct sigevent aio_sigevent;
+};
+
+/* function prototypes as defined by Posix */
+int aio_cancel (int, struct aiocb *);
+int aio_error (const struct aiocb *);
+#ifdef _POSIX_SYNCHRONIZED_IO
+int aio_fsync (int, struct aiocb *);
+#endif
+int aio_read (struct aiocb *);
+ssize_t aio_return (struct aiocb *);
+int aio_suspend (const struct aiocb *const [], int,
+ const struct timespec *);
+int aio_write (struct aiocb *);
+int lio_listio (int, struct aiocb *restrict const [restrict], int,
+ struct sigevent *restrict);
+
+#ifdef __cplusplus
+}
+#undef restrict
+#endif
+#endif /* _AIO_H */
--
2.16.2
More information about the Cygwin-patches
mailing list