Библиотека сайта 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 );
Можно предположить, что каждая асинхронная операция выполняется как отдельный поток, у которого не циклическая функция потока.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Ввод-вывод управляемый сигналом | Терминал, режим ввода: канонический и некононический |