スポンサーリンク

AIO_READ(2) FreeBSD システムコールマニュアル AIO_READ(2)

名称

aio_read − ファイルからの非同期読取り (REALTIME)

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <aio.h>

int

aio_read(struct aiocb *iocb);

解説

aio_read() システムコールは、呼び出しプロセスに記述子 iocb->aio_fildes の オフセット iocb->aio_offset で始まる iocb->aio_nbytes を、 iocb->aio_buf が指すバッファに読み取れるようにします。呼び出しは、読取り要求が記述子に 待ち行列として入れられるとただちに戻ります。呼び出しが戻った時点で読取り は完了していることもありますし、完了していないこともあります。

_POSIX_PRIORITIZED_IO が定義されており、しかも記述子がこれをサポートして いる場合に待ち行列に入れられている操作は、呼び出しプロセスの優先順位から iocb->aio_reqprio を減じたものに等しい優先順位で発行されます。

iocb->aio_lio_opcode 引数は aio_read() システムコールによって無視されま す。

iocb ポインタは、進行中に待ち行列に入れられた戻り状態またはエラー状態を判 定するために、 aio_return() と aio_error() の引数として後に使用される可能 性があります。

要求が待ち行列に入れられない場合 (一般には無効な引数のために)、呼び出しは 要求を待ち行列に入れずに戻ります。

要求が正常に待ち行列に入れられると、コンテキストとして要求の間に iocb->aio_offset の値が修正される可能性があるので、この値は要求が待ち行列 に入れられた後は参照してはなりません。

制限

iocb が指す非同期入出力制御ブロック構造体、およびその構造体の iocb->aio_buf メンバが参照するバッファは、操作が完了するまで有効である必 要があります。このため、これらのオブジェクトについての自動 (スタック) 変 数の使用は推奨されません。

カーネルへの正しくないコンテキスト情報の引き渡しを回避するために、非同期 入出力制御バッファ iocbaio_read() 呼び出しの前に 0 にする必要がありま す。

要求が待ち行列に入れられた後、要求が完了するまでは非同期入出力制御ブロッ ク構造体またはバッファ内容の修正は許されていません。

iocb->aio_offset 内のファイルオフセットが、 iocb->aio_fildes の最大オフ セットを越えている場合は入出力は行われません。

戻り値

関数 aio_read() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。

診断

なし。

エラー

aio_read() システムコールは次の場合に失敗します:

       [EAGAIN]

システムリソースの限界のために要求は待ち行列に入れられ ませんでした。

[ENOSYS]
aio_read
() システムコールがサポートされていません。

以降の条件は、 aio_read() システムコールが行われたときに同期的に検出され ることもありますし、その後いつでも非同期的に検出されることもあります。こ れらが呼び出し時に検出された場合、 aio_read() システムコールは -1 を返 し、 errno を適切に設定します。そうでない場合は、 aio_return() 関数を呼び 出し、-1 を返し、 errno に返されている実際の値を判定するために aio_error() を呼び出す必要があります。

[EBADF]
iocb->aio_fildes
引数が無効です。

[EINVAL]
オフセット iocb->aio_offset が有効でないか、 iocb->aio_reqprio によって指定される優先順位が有効な優 先順位でないか、または iocb->aio_nbytes によって指定さ れるバイト数が有効でありません。

[EOVERFLOW]
ファイルは正規のファイルであり、 iocb->aio_nbytes は 0 より大きくて iocb->aio_offset 内の開始オフセットはファ イルの末尾の前にあるものの、 iocb->aio_fildes オフセッ ト最大にあるかまたはそれを越えています。

要求が正常に待ち行列に入れられたものの、後でキャンセルされるかエラーが発 生した場合、 aio_return() システムコールによって返された値が read(2) シス テムコールごとによるものであり、 aio_error() システムコールによって返され る値が read(2) システムコールから返されたエラーの 1 つであるか、または次 の 1 つです。

[EBADF]
iocb->aio_fildes
引数が読取りについては無効です。

[ECANCELED]
要求は aio_cancel() の呼び出しによって明示的にキャンセ ルされました。

[EINVAL]
オフセット iocb->aio_offset は無効です。

関連項目

aio_cancel(2), aio_error(2), aio_return(2), aio_suspend(2), aio_waitcomplete(2), aio_write(2), aio(4)

規格

aio_read() システムコールは IEEE Std 1003.1 (‘‘POSIX.1’’) に適合していま す。

歴史

aio_read() システムコールは FreeBSD 3.0 ではじめて登場しました。

作者

このマニュアルページは Terry Lambert ⟨terry@whistle.com⟩ が作成しました。

バグ

iocb->_aiocb_private 内の無効な情報はカーネルを混乱させる可能性がありま す。

FreeBSD 10.0 November 17, 1998 FreeBSD 10.0

スポンサーリンク