То, что я , кажется, понимаю:
POSIX AIO
API прототипы в
, и вы связываете свою программу с librt (-lrt), тогда как API libaio
в
, а ваша программа связана с libaio (-laio).
Чего я не могу понять:
1. По-разному ли ядро обрабатывает любой из этих методов?
2. Обязателен ли флаг O_DIRECT
для использования любого из них?
Как упоминалось в этой публикации , libaio отлично работает без O_DIRECT
при использовании libaio
. Хорошо, понятно, но:
Согласно R.Love's Книга по системному программированию Linux , Linux поддерживает aio (который Я предполагаю, что это POSIX AIO) только для обычных файлов , если они открыты с помощью O_DIRECT
. Но это небольшая программа, которую я написал (используя aio.h, связанный с -lrt), которая вызывает aio_write
в файле, открытом без флага O_DIRECT
, работает без проблем.