#include #include #include #include #include #include #include #include #include #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) const char usage[] = "Usage: test_aio [filename]"; int main(int argc, char *argv[]) { int res, i; struct timespec tspec; uint64_t data = 0xa5a5a5a5a5a5a5a5ULL; unsigned int iocbs_num = 1; struct iocb iocb_i[iocbs_num]; struct iocb *iocbs[iocbs_num]; struct io_event events[iocbs_num]; io_context_t io_ctx; int fd; if (argc < 2) { fputs(usage, stderr); exit(1); } for (i = 0; i < iocbs_num; i++) iocbs[i] = &iocb_i[i]; fd = open(argv[1], O_RDWR | O_SYNC); if (fd < 0) { perror("open"); exit(1); } res = io_queue_init(iocbs_num, &io_ctx); if (res != 0) { fprintf(stderr, strerror(-res)); exit(1); } int num_io = 1; io_prep_pread(iocbs[0], fd, &data, sizeof(data), 0); res = io_submit(io_ctx, num_io, iocbs); if (res != num_io) { fprintf(stderr, strerror(-res)); exit(1); } res = io_cancel(io_ctx, iocbs[0], &events[0]); printf("io_cancel: res = %d\n", res); printf("events[0].res = %lu\n", events[0].res); printf("events[0].res2 = %lu\n", events[0].res2); tspec.tv_nsec = 0; tspec.tv_sec = 1; res = io_getevents(io_ctx, num_io, num_io, events, &tspec); printf("io_getevents: %d", res); io_queue_release(io_ctx); close(fd); }