Функции aio_read(3AIO), aio_write(3AIO) и lio_listio(3AIO)

В Solaris 10 функции асинхронного ввода/вывода включены в библиотеку libaio.so. Для сборки программ, использующих эти функции, необходимо использовать ключ –laio.

Для формирования запросов на асинхронный ввод/вывод используются функции aio_read(3AIO), aio_write(3AIO) и lio_listio(3AIO).

Функции aio_read(3AIO) и aio_write(3AIO) имеют единственный параметр, struct aiocb *aiocbp. Структура aiocb определена в файле <aio.h> и содержит следующие поля:

int aio_fildes – дескриптор файла

off_t aio_offset – смещение в файле, начиная с которого будет идти запись или чтение

volatile void* aio_buf – буфер, в который следует прочитать данные или в котором лежат данные для записи.

size_t aio_nbytes – размер буфера. Как и традиционный read(2), aio_read(3AIO) может прочитать меньше данных, чем было запрошено, но никогда не прочитает больше.

int aio_reqprio – приоритет запроса

struct sigevent aio_sigevent – способ оповещения о завершении запроса (рассматривается далее в этом разделе)

int aio_lio_opcode – при aio_read(3AIO) и aio_write(3AIO) не используется, используется только функцией lio_listio.

Функция lio_listio(3AIO) позволяет одним системным вызовом сформировать несколько запросов на ввод/вывод. Эта функция имеет четыре параметра:

int mode – может принимать значения LIO_WAIT (функция ждет завершения всех запросов) и LIO_NOWAIT (функция возвращает управление сразу после формирования всех запросов).

struct aiocb *list[] – список указателей на структуры aiocb с описаниями запросов. Запросы могут быть как на чтение, так и на запись, это определяется полем aio_lio_opcode. Запросы к одному дескриптору исполняются в том порядке, в каком они указаны в массиве list.

int nent – количество записей в массиве list.

struct sigevent *sig – способ оповещения о завершении всех запросов. Если mode==LIO_WAIT, этот параметр игнорируется.

Библиотека POSIX AIO предусматривает два способа оповещения программы о завершении запроса, синхронный и асинхронный. Сначала рассмотрим синхронный способ.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: