Асинхронный блок управления ввода/вывода
#include <aio.h>
struct aiocb {
int aio_fildes;
off_t aio_offset;
volatile void *aio_buf;
size_t aio_nbytes;
int aio_reqprio;
struct sigevent aio_sigevent;
int aio_lio_opcode;
}
- aio_fildes
- Дескриптор файла для использования в асинхронных операциях ввода/вывода.
| Функции aio_*() работают прозрачно в распределенном окружении Qnet; поэтому дескриптор файла может быть открытым на другом узле Qnet. |
- aio_offset
- Смещение в файле.
- aio_buf
- Указатель на буфер.
- aio_nbytes
- Длина передачи.
- aio_reqprio
- Приоритет запроса.
- aio_sigevent
- Указатель на struct sigevent, которая определяет номер сигнала и его значение.
- aio_lio_opcode
- Операция, которую нужно выполнить:
- LIO_NOP
- операция lio_listio(), указывающая, что передача не запрашивается.
- LIO_NOWAIT
- операция синхронизации lio_listio(), указывающая, что вызывающий поток должен продолжить выполнение, пока выполняется операция lio_listio() и не уведомлять о завершении операции.
- LIO_READ
- операция lio_listio(), запрашивающая чтение.
- LIO_WAIT
- операция синхронизации lio_listio(), указывающая, что вызывающий поток должен приостановить работу до завершения операции lio_listio().
- LIO_WRITE
- операция lio_listio(), запрашивающая запись.
POSIX 1003.1 Asynchronous Input/Output
При первом вызове функций aio_*() создается пул потоков, что делает процесс многопоточным, если он не был таковым. Пул потоков не уничтожится до тех пор, пока процесс не завершится.
struct sigevent, aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_suspend(), aio_write(), lio_listio()
Предыдущий раздел: Описание API системной библиотеки