aio_cancel()

Прервать асинхронную операцию ввода/вывода

Прототип:

#include <aio.h>
int aio_cancel( int fd,
struct aiocb *aiocbptr );

Аргументы:

fd
Файловый дескриптор, для которого нужно запросить отмену асинхронной операции ввода/вывода.
aiocbptr
Указатель на управляющий блок асинхронного ввода/вывода типа struct aiocb для операции, которую нужно отменить, или NULL, если нужно отменить все операции для файлового дескриптора.

Библиотека:

libc

Описание:

Функция aio_cancel() пытается отменить одну или несколько асинхронных операций ввода/вывода для файлового дескриптора, ожидающих обработки в данный момент.

Для успешно отмененных асинхронных операций ввода/вывода происходит обычное асинхронное уведомление. Если есть запросы, которые нельзя отменить, то при завершении этих запросов выполняется обычный процесс асинхронного завершения.

Статус ошибки, связанный с запрашиваемыми операциями, которые были успешно отменены, устанавливается в ECANCELED, статус возврата устанавливается в -1. Функция aio_cancel() не изменяет структуры struct aiocb для запрашиваемых операций, которые не были успешно отменены.

Если aiocbptr не равен NULL, aio_cancel() игнорирует аргумент fildes и пытается отменить операции ввода/вывода, определяемые блоком управления struct aiocb. Операция не отменяется, если она уже выполняется.

Возвращаемое значение:

AIO_CANCELED
Запрашиваема операция была отменена.
AIO_NOTCANCELED
Как минимум одна из запрашиваемых операций не может быть отменена, так как она уже выполняется.

Note: Возвращаемое значение AIO_NOTCANCELED не указывает на состояние любых других операций, упомянутых в вызове aio_cancel(). Для определения их состояния нужно использовать aio_error().

AIO_ALLDONE
Все операции уже завершены.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EBADF
Аргумент filedes не является корректным файловым дескриптором.
EINVAL
Управляющий блок, на который указывает aiocbptr, не является корректным (не использовался ни в одном вызове aio_read() или aio_write()).

Классификация:

POSIX 1003.1 Asynchronous Input/Output

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

При первом вызове функций aio_*() создается пул потоков, что делает процесс многопоточным, если он не был таковым. Пул потоков не уничтожится до тех пор, пока процесс не завершится.

Тематические ссылки:

aio_error(), aio_fsync(), aio_read(), aio_return(), aio_suspend(), aio_write(), struct aiocb




Предыдущий раздел: Описание API системной библиотеки