LIO_LISTIO(2) | FreeBSD System Calls Manual | LIO_LISTIO(2) |
名称
lio_listio — リスト指示の入出力 (リアルタイム)ライブラリ
Standard C Library (libc, -lc)書式
#include < aio.h> int
lio_listio( int mode, struct aiocb * const list[], int nent, struct sigevent *sig);
解説
lio_listio() 関数は 1 つの関数呼び出しで、リストの入出力要求を開始させます。 list 引数は、それぞれの実行すべき操作を記述した nent 個の要素の aiocb 構造体の配列へのポインタです。 NULL 要素は無視されます。それぞれの aiocb の aio_lio_opcode フィールドは実行されるべき操作を指定します。以下の操作がサポートされています:
- LIO_READ
- まるで aio_read(2) の呼び出しかのように、データを読み込みます。
- LIO_NOP
- 何の操作もしません。
- LIO_WRITE
- まるで aio_write(2) の呼び出しかのように、データを書み込みます。
mode 引数が LIO_WAIT の場合には、 lio_listio() は全ての要求された操作が完了するまで戻りません。 mode が LIO_NOWAIT の場合には、要求は非同期に処理され、全ての操作が完了したときに sig によって指定されたシグナルが送られます。 sig が NULL の場合には、呼び出したプロセスには入出力の完了が通知されません。
要求が実行される順番は、指定されません。特に、0, 1, ..., nent-1 の順序で実行される保証はありません。
戻り値
mode が LIO_WAIT の場合には、 lio_listio() 関数は成功して操作が完了すると 0 を返し、そうでなければ-1 を返します。mode が LIO_NOWAIT の場合には、 lio_listio() 関数は成功して操作がキューに入れられると 0 を返し、そうでなければ-1 を返します。
エラー
lio_listio() 関数は以下の場合に失敗します:- [ EAGAIN]
- 要求をキューに入れるために十分なリソースがありません。
- [ EAGAIN]
- 要求がシステムによる制限 AIO_MAX を超えさせます。
- [ EINVAL]
- mode 引数が LIO_WAIT または LIO_NOWAIT のどちらでもありません。または、 nent が AIO_LISTIO_MAX よりも大きいです。
- [ EINTR]
- 恐らく完了する前に、シグナルがシステムコールに割り込みました。
- [ EIO]
- 1 つ以上の要求が失敗しました。
加えて、 lio_listio() 関数は aio_read(2) および aio_write(2) に記載されているあらゆる理由で失敗するかもしれません。
lio_listio() が成功した場合、または EAGAIN, EINTR, または EIO のエラーコードで失敗した場合には、幾つかの要求が既に開始されているかもしれません。呼び出し側はそれぞれの aiocb のエラー状態を、個別に aio_error(2) を呼び出すことによって、チェックするべきです。
規格
lio_listio() 関数は、 IEEE Std 1003.1-2001 (“POSIX.1”) に適合しているはずです。January 12, 2003 | FreeBSD |