Библиотека сайта rus-linux.net
| Цилюрик О.И. Linux-инструменты для Windows-программистов | ||
| Назад | Библиотеки API POSIX | Вперед |
Асинхронный ввод-вывод
Асинхронный ввод-вывод добавлен только в редакции
стандарта POSIX.1g (1993г., одно из расширений реального времени). В вызове aio_read()
даётся указание ядру начать операцию ввод-вывода, и указывается,
каким сигналом уведомить процесс о завершении операции (включая
копирование данных в пользовательский буфер). Вызывающий процесс не
блокируется. Результат операции (например, полученная UDP
дейтаграмма) может быть обработан, например, в обработчике сигнала.
Разница с предыдущей моделью, управляемой сигналом, состоит в том,
что в той модели сигнал уведомлял о возможности начала операции
(вызове операции чтения), а в асинхронной модели сигнал уведомляет
уже о завершении операции чтения в буфер пользователя.
Всё, что относится к асинхронному вводу-выводу в Linux описано в <aio.h>. Управляющий блок асинхронного ввода-вывода — видны все поля, которые обсуждались выше:
struct aiocb { /* Asynchronous I/O control block. */
int aio_fildes; /* File desriptor. */
int aio_lio_opcode; /* Operation to be performed. */
int aio_reqprio; /* Request priority offset. */
volatile void *aio_buf; /* Location of buffer. */
size_t aio_nbytes; /* Length of transfer. */
struct sigevent aio_sigevent; /* Signal number and value. */
...
}
Того же назначения блок для 64-битных операций:
struct aiocb64 {
...
}
И некоторые операции (в качестве примера):
int aio_read( struct aiocb *__aiocbp );
int aio_write( struct aiocb *__aiocbp );
Инициализация выполнения целой цепочки асинхронных
операций (длиной __nent):
int lio_listio( int __mode, struct aiocb* const list[ __restrict_arr ], int __nent, struct sigevent *__restrict __sig ) ;
Как и для потоков pthread_t, асинхронные операции значительно легче
породить, чем позже остановить... для чего также потребовался отдельный API:
int aio_cancel( int __fildes, struct aiocb *__aiocbp );
Можно предположить, что каждая асинхронная операция выполняется как отдельный поток, у которого не циклическая функция потока.
| Предыдущий раздел: | Оглавление | Следующий раздел: |
| Ввод-вывод управляемый сигналом | Терминал, режим ввода: канонический и некононический |
