Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all
名前
aio_read - 非同期で読み込む
書式
#include <aio.h> int aio_read(struct aiocb *aiocbp); -lrt でリンクする。
説明
aio_read() 関数は、aiocbp が指すバッファに記載された I/O リクエストを キューに入れる。この 関数は read(2) の非同期版である。 呼び出し read(fd, buf, count) の各引き数は aiocb が指す構造体の aio_fildes, aio_buf, aio_nbytes に (この順序で) 対応する (aiocb 構造体の説明は aio(7) を参照)。 データの読み込みは、カレントのファイルオフセットに関係なく、 絶対ファイルオフセット aiocbp->aio_offset を開始点として行われる。 呼び出しの後のカレントのファイルオフセットは規 定されていない。 「非同期」とは「リクエストがキューに入れられたら、この呼び出しはすぐに返る」 ということで ある。 呼び出しから戻った時に、読み込みは完了しているかも知れないし、 完了していないかも知 れない。 aio_error(3) を使うことで完了したかをテストできる。 完了した I/O 操作の返り値は aio_return(3) で取得できる。 aiocbp->aio_sigevent を適切に設定することで、 I/O 完了の非同 期通知は受けることもできる。詳細は sigevent(7) を参照。 _POSIX_PRIORITIZED_IO が定義されていて、 かつファイルがこれをサポートしている場合、 非同期 操作は呼び出したプロセスの優先度から aiocbp->aio_reqprio を引いた優先度で登録 (submit) さ れる。 フィールド aiocbp->aio_lio_opcode は無視される。 最大オフセットを超えた通常のファイルからは、何もデータが読み込まれない。
返り値
成功した場合、0 が返される。 エラーの場合、リクエストはキューに入れられず、 -1 が返され て、 errno が適切に設定される。 エラーは後でのみ検知された場合は、 エラーは aio_return(3) と aio_error(3) 経由で報告されることになる (aio_return(3) は状態 -1 を返し、aio_error(3) でエラー状態— errno で取得できる EBADF のようなエラー状態が返される)。
エラー
EAGAIN リソースが足りない。 EBADF aio_fildes は読み込みのためにオープンされた有効なファイルディスクリプタでない。 EINVAL aio_offset, aio_reqprio, aio_nbytes のうち 1 つ以上が無効である。 ENOSYS aio_read() は実装されていない。 EOVERFLOW ファイルが通常のファイルであり、 ファイルの終端の前から読み込みを開始して、 少なく とも 1 バイトを読み込もうとした。 しかし開始位置がこのファイルの最大オフセットを超 えていた。
バージョン
The aio_read() 関数は glibc 2.1 以降で利用できる。
準拠
POSIX.1-2001, POSIX.1-2008.
注意
使用する前に制御ブロックを 0 にしておくのは、よい考えである。 この制御ブロックは、読み込み 操作が進行している間は変更すべきでない。 読み込まれるバッファ領域は 操作の最中にアクセスす べきではない。 さもないと起こる結果が不定になる。 これに含まれるメモリ領域は、有効なままに しなければならない。 同じ aiocb 構造体を指定して同時に複数の I/O 操作を行った場合、 どのような結果になるかは不 定である。
例
aio(7) を参照。
関連項目
aio_cancel(3), aio_error(3), aio_fsync(3), aio_return(3), aio_suspend(3), aio_write(3), lio_listio(3), aio(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。 2012-05-08 AIO_READ(3)