.\" Copyright (C) 2003 Free Software Foundation, Inc.
.\"
.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
.\" This file is distributed according to the GNU General Public License.
.\" %%%LICENSE_END
.\"
.TH IO_CANCEL 2 2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
io_cancel \- cancel an outstanding asynchronous I/O operation
.SH SYNOPSIS
.nf
.BR "#include <linux/aio_abi.h>" "    /* Definition of needed types */"
.BR "#include <sys/syscall.h>" "      /* Definition of " SYS_* " constants */"
.B #include <unistd.h>
.PP
.BI "int syscall(SYS_io_cancel, aio_context_t " ctx_id ", struct iocb *" iocb ,
.BI "            struct io_event *" result );
.fi
.SH DESCRIPTION
.IR Note :
this page describes the raw Linux system call interface.
The wrapper function provided by
.I libaio
uses a different type for the
.I ctx_id
argument.
See NOTES.
.PP
The
.BR io_cancel ()
system call
attempts to cancel an asynchronous I/O operation previously submitted with
.BR io_submit (2).
The
.I iocb
argument describes the operation to be canceled and the
.I ctx_id
argument is the AIO context to which the operation was submitted.
If the operation is successfully canceled, the event will be copied into
the memory pointed to by
.I result
without being placed into the
completion queue.
.SH RETURN VALUE
On success,
.BR io_cancel ()
returns 0.
For the failure return, see NOTES.
.SH ERRORS
.TP
.B EAGAIN
The \fIiocb\fP specified was not canceled.
.TP
.B EFAULT
One of the data structures points to invalid data.
.TP
.B EINVAL
The AIO context specified by \fIctx_id\fP is invalid.
.TP
.B ENOSYS
.BR io_cancel ()
is not implemented on this architecture.
.SH VERSIONS
The asynchronous I/O system calls first appeared in Linux 2.5.
.SH CONFORMING TO
.BR io_cancel ()
is Linux-specific and should not be used
in programs that are intended to be portable.
.SH NOTES
You probably want to use the
.BR io_cancel ()
wrapper function provided by
.\" http://git.fedorahosted.org/git/?p=libaio.git
.IR libaio .
.PP
Note that the
.I libaio
wrapper function uses a different type
.RI ( io_context_t )
.\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
.\" the system call.
for the
.I ctx_id
argument.
Note also that the
.I libaio
wrapper does not follow the usual C library conventions for indicating errors:
on error it returns a negated error number
(the negative of one of the values listed in ERRORS).
If the system call is invoked via
.BR syscall (2),
then the return value follows the usual conventions for
indicating an error: \-1, with
.I errno
set to a (positive) value that indicates the error.
.SH SEE ALSO
.BR io_destroy (2),
.BR io_getevents (2),
.BR io_setup (2),
.BR io_submit (2),
.BR aio (7)
.\" .SH AUTHOR
.\" Kent Yoder.
