AIO_WAITCOMPLETE(2)

名称
aio_waitcomplete - 非同期入出力要求の完了までの待機

ライブラリ
libc

書式
<aio.h> int aio_waitcomplete(struct aiocb **iocbp, struct timespec *timeout)

解説
aio_waitcomplete() 関数は非同期入出力の完了まで待ちます。完了次第、 aio_waitcomplete() はその関数の結果を返し、 元の要求に関連する構造体へのポインタを iocbp にセットします。もし、 aio_waitcomplete() 関数が呼び出される前に非同期入出力要求が完了していた場合には、 完了した要求の結果を即座に返します。

timeout がヌルポインタでない場合、それは非同期入出力要求が完了するまで 待機する最大時間を指定します。 timeout がヌルポインタの場合は、 aio_waitcomplete() は無期限に待機します。 ポーリングする場合は、 引数 timeout はヌルではなく、0 の値を持つ timeval 構造体を指すようにするべきです。

aio_waitcomplete() 関数は aio_return() の役割もします。従って、 コントロールブロックは iocbp で返されているので、 aio_return() を呼び出すべきではありません。

戻り値
非同期入出力リクエストが完了した場合、 iocbp に元のリクエストから渡されたコントロールブロックを指すポインタを設定し、 read(2), write(2), fsync(2) で述べられているのと同様のステータスを返します。 失敗した場合、 aio_waitcomplete() は -1 を返し、iocbp に NULL を設定します。そして、 errno にエラーの状況を設定します。

エラー
aio_waitcomplete() 関数は次の場合に失敗します:

[EINVAL]
    指定された制限時間が無効です。

[EAGAIN]
    プロセスはまだ aio_read() や aio_write() を呼び出していません。

[EINTR]
    タイムアウトする前で、かつ 非同期入出力リクエストが完了する前にシグナルが届きました。

[EWOULDBLOCK]

[EINPROGRESS]
    非同期入出力リクエストが完了する前に、指定された制限時間に達しました。

関連項目
aio_cancel(2), aio_error(2), aio_read(2), aio_return(2), aio_suspend(2), aio_write(2), fsync(2), read(2), write(2)

規格
aio_waitcomplete() 関数は FreeBSD 特有の拡張です。

歴史
aio_waitcomplete() 関数は FreeBSD 4.0 ではじめて登場しました。

作者
aio_waitcomplete() 関数とこのマニュアルページは Christopher M Sedore <cmsedore@maxwell.syr.edu> が作成しました。