aio_read - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
aio_read - 非同期で読み込む
書式
"#include <aio.h>"
int aio_read(struct aiocb *
aiocbp
);
説明
aio_read ()関数は非同期の "n = read(fd, buf, count)" をリクエストする。 ここで fd, buf, count は、それぞれ aiocbp->aio_fildes , aiocbp->aio_buf , aiocbp->aio_nbytes で与えられる。 返り値 (return status) n は、完了時に aio_return (3) を使って取得できる。
データは、カレントのファイル位置に関係なく、絶対ファイルオフセット aiocbp->aio_offset を開始点として読み込まれる。 このリクエスト後の、カレントのファイル位置は規定されていない。
「非同期」とは「リクエストがキューに入れられたら、この呼び出しはすぐに返る」 ということである。 呼び出しから戻った時に、読み込みは完了しているかも知れないし、 完了していないかも知れない。 aio_error (3) を使うことで完了したかをテストできる。
_POSIX_PRIORITIZED_IO が定義されていて、 かつファイルがこれをサポートしている場合、 非同期操作は呼び出したプロセスの優先度から aiocbp->aio_reqprio を引いた優先度で登録 (submit) される。
フィールド aiocbp->aio_lio_opcode は無視される。
最大オフセットを超えた通常のファイルからは、何もデータが読み込まれない。
返り値
成功した場合、0 が返される。 エラーの場合、リクエストはキューに入れられず、 -1 が返されて、 errno が適切に設定される。 エラーは最初に検知された後で、 (状態 -1 を返す) aio_return (3) と ( errno で取得できる EBADF のようなエラー状態を返す) aio_error (3) で報告されるだろう。
エラー
- EAGAIN
- リソースが足りない。
- EBADF
- aio_fildes は読み込みのためにオープンされた有効なファイルディスクリプタでない。
- EINVAL
- aio_offset , aio_reqprio , aio_nbytes のうち 1 つ以上が無効である。
- ENOSYS
- この関数がサポートされていない。
- EOVERFLOW
- ファイルが通常のファイルであり、 ファイルの終端の前から読み込みを開始して、 少なくとも 1 バイトを読み込もうとした。 しかし開始位置がこのファイルの最大オフセットを超えていた。
注意
使用する前に制御ブロックを 0 にしておくのは、よい考えである。
この制御ブロックは、読み込み操作が進行している間は変更すべきでない。
読み込まれるバッファ領域は
操作の最中にアクセスすべきではない。
さもないと起こる結果が不定になる。
これに含まれるメモリ領域は、有効なままにしなければならない。
準拠
POSIX.1-2001