io_submit(2) System Calls Manual io_submit(2) io_submit - / (libc -lc) #include #include /* SYS_* */ #include int syscall(SYS_io_submit, aio_context_t ctx_id, long n, struct iocb *iocbpp[n]); : io_setup(3) libaio . io_submit() n / AIO ctx_id. iocbpp n AIO ctx_id. iocb ( /) linux/aio_abi.h /. #include struct iocb { __u64 aio_data; __u32 PADDED(aio_key, aio_rw_flags); __u16 aio_lio_opcode; __s16 aio_reqprio; __u32 aio_fildes; __u64 aio_buf; __u64 aio_nbytes; __s64 aio_offset; __u64 aio_reserved2; __u32 aio_flags; __u32 aio_resfd; }; : aio_data data io_event / ( io_getevents(2)). aio_key . io_submit(). aio_rw_flags / . : RWF_APPEND ( 4.16) . pwritev2(2) O_APPEND open(2). aio_offset. . RWF_DSYNC ( 4.13) / . pwritev2(2) O_DSYNC open(2). RWF_HIPRI ( 4.13) RWF_NOWAIT ( 4.14) / . -EAGAIN res io_event ( io_getevents(2)). RWF_SYNC ( 4.13) / . pwritev2(2) O_SYNC open(2). RWF_NOAPPEND ( 6.9) O_APPEND open(2). RWF_NOAPPEND pwritev2(2). RWF_ATOMIC ( 6.11) . RWF_ATOMIC pwritev2(2). IOCB_CMD_PWRITEV stx_atomic_write_segments_max. STATX_WRITE_ATOMIC stx_atomic_write_segments_max statx(2). aio_lio_opcode / iocb. linux/aio_abi.h: enum { IOCB_CMD_PREAD = 0, IOCB_CMD_PWRITE = 1, IOCB_CMD_FSYNC = 2, IOCB_CMD_FDSYNC = 3, IOCB_CMD_POLL = 5, IOCB_CMD_NOOP = 6, IOCB_CMD_PREADV = 7, IOCB_CMD_PWRITEV = 8, }; aio_reqprio . aio_fildes /. aio_buf . aio_nbytes aio_buf. aio_offset /. aio_flags iocb. : IOCB_FLAG_RESFD / aio_resfd . IOCB_FLAG_IOPRIO ( 4.18) aio_reqprio IOPRIO_VALUE linux/ioprio.h. aio_resfd / . io_submit() iocb ( n 0 n ). -1 errno . EAGAIN iocb. EBADF iocb . EFAULT . EINVAL AIO ctx_id . EINVAL n 0. EINVAL iocb *iocbpp[0] . EINVAL iocb. EINVAL aio_reqprio . ENOSYS io_submit() . EPERM aio_reqprio IOPRIO_CLASS_RT CAP_SYS_ADMIN. libaio . . . 2.5. io_cancel(2), io_destroy(2), io_getevents(2), io_setup(2), io_submit(3), aio(7) 3 . . : . 6.18 11 2026 io_submit(2)