aio_suspend()

Ожидать завершения асинхронных операций ввода/вывода

Прототип:

#include <aio.h>
int aio_suspend( const struct aiocb *const list[],
int nent,
const struct timespec *timeout );

Аргументы:

list
Список структур struct aiocb, описывающих асинхронные операции, чьего завершения надо дождаться. Каждая структура struct aiocb должна быть использована при инициировании запроса асинхронного ввода/вывода через aio_read(), aio_write() или lio_listio(). Список может содержать указатели на NULL, которые функция aio_suspend() игнорирует.
nent
Количество элементов в списке.
timeout
NULL или указатель на структуру struct timespec, которая определяет максимальный промежуток времени ожидания завершения операции.

Библиотека:

libc

Описание:

Функция aio_suspend() приостанавливает вызывающий поток до тех пор, пока хотя бы одна из асинхронных операций ввода/вывода из аргумента list не завершится, либо пока сигнал не прервет функцию, либо, если timeout не равен NULL, до тех пор, пока не пройдет временной интервал, переданный в timeout.

Если какая-либо структура struct aiocb из списка ссылается на завершенную асинхронную операцию ввода/вывода (то есть статус ошибки для операции не равен EINPROGRESS) во время вызова функции, aio_suspend() завершается без приостановки вызывающего потока.

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

0
Успешное завершение. Одна или несколько асинхронных операций были завершены.
-1
Возникла ошибка. Код ошибки записан в errno.

Можно определить, какая из асинхронных операций ввода/вывода была завершена, анализируя статусы ошибки и завершения с использованием функций aio_error() и aio_return().

Коды ошибок:

EAGAIN
Ни одна из асинхронных операций ввода/вывода из списка не завершилась за временной промежуток, указанный в timeout.
EINTR
Функция aio_suspend() прервана сигналом. Следует заметить, что, поскольку каждая асинхронная функция ввода/вывода может вызвать сигнал при завершении, данная ошибка может возникнуть при завершении одной или нескольких ожидаемых операций ввода/вывода.

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

POSIX 1003.1 Asynchronous Input/Output

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

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

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

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

aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_write(), struct aiocb, lio_listio(), struct timespec




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