aio_fsync()

Выполнить асинхронную файловую синхронизацию

Прототип:

#include <aio.h>
int aio_fsync( int op,
struct aiocb *aiocbptr );

Аргументы:

op
Одно из следующих значений:
O_DSYNC
завершить все операции в очереди, как если бы был выполнен вызов fdatasync() (для обеспечения целостности синхронизованного ввода/вывода).
O_SYNC
завершить все операции в очереди, как если бы был выполнен вызов fsync() (для обеспечения целостности синхронизованного ввода/вывода).
aiocbptr
Указатель на управляющий блок асинхронного ввода/вывода типа struct aiocb, для которого нужно принудительно выполнить синхронизацию.

Библиотека:

libc

Описание:

Функция aio_fsync() выполняет асинхронную файловую синхронизацию всех операций ввода/вывода, связанных с файловым дескриптором, что синхронизирует состояние ввода/вывода.

Если функция успешно завершается, гарантируется завершение только тех операций ввода/вывода, которые были поставлены в очередь во время вызова. Синхронизированное завершение последующих операций ввода/вывода для файлового дескриптора не гарантируется. Если операция, которая ставит в очередь aio_fsync(), завершается неудачно, выполнение оставшихся операций ввода/вывода не гарантируется.

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

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

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

Коды ошибок:

EAGAIN
Запрашиваемая асинхронная операция не была добавлена в очередь из-за временных ресурсных ограничений.
EBADF
Поле io_fildes структуры struct aiocb, на которую ссылается аргумент aiocbptr, не является корректным файловым дескриптором, открытым для записи.
EINVAL
Синхронизованный ввод/вывод не поддерживается для данного файла.
EINVAL
Аргумент op отличается от O_DSYNC или O_SYNC.

Если какая-либо из операций ввода/вывода в очереди завершилась неудачно, aio_fsync() возвращает причину возникновения ошибки, определенную для read() и write(). Ошибка возвращается в статусе ошибки для асинхронной операции fsync(), значение которой можно получить с помощью aio_error().

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

POSIX 1003.1 Asynchronous Input/Output

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

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

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

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

aio_cancel(), aio_error(), aio_read(), aio_return(), aio_suspend(), aio_write(), struct aiocb, fdatasync(), fsync(), read(), write()




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