.\" Copyright (c) 2003 Tim J. Robbins .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libc/sys/lio_listio.2,v 1.2 2003/06/01 19:19:59 ru Exp % .\" .\" $FreeBSD$ .Dd January 12, 2003 .Dt LIO_LISTIO 2 .Os .Sh 名称 .Nm lio_listio .Nd "リスト指示の入出力 (リアルタイム)" .Sh ライブラリ .Lb libc .Sh 書式 .In aio.h .Ft int .Fo lio_listio .Fa "int mode" .Fa "struct aiocb * const [] list" .Fa "int nent" .Fa "struct sigevent *sig" .Fc .Sh 解説 .Fn lio_listio 関数は 1 つの関数呼び出しで、リストの入出力要求を開始させます。 .Fa list 引数は、それぞれの実行すべき操作を記述した .Fa nent 個の要素の .Vt aiocb 構造体の配列へのポインタです。 .Dv NULL 要素は無視されます。 .Pp それぞれの .Vt aiocb の .Va aio_lio_opcode フィールドは実行されるべき操作を指定します。 以下の操作がサポートされています: .Bl -tag -width ".Dv LIO_WRITE" .It Dv LIO_READ まるで .Xr aio_read 2 の呼び出しかのように、データを読込みます。 .It Dv LIO_NOP 何の操作もしません。 .It Dv LIO_WRITE まるで .Xr aio_write 2 の呼び出しかのように、データを書込みます。 .El .Pp .Fa mode 引数が .Dv LIO_WAIT の場合には、 .Fn lio_listio は全ての要求された操作が完了するまで戻りません。 .Fa mode が .Dv LIO_NOWAIT の場合には、要求は非同期に処理され、全ての操作が完了したときに .Fa sig によって指定されたシグナルが送られます。 .Fa sig が .Dv NULL の場合には、呼び出したプロセスには入出力の完了が通知されません。 .Pp 要求が実行される順番は、指定されません。特に、0, 1, ..., .Fa nent Ns \-1 の順序で実行される保証はありません。 .Sh 戻り値 .Fa mode が .Dv LIO_WAIT の場合には、 .Fn lio_listio 関数は成功して操作が完了すると 0 を返し、 そうでなければ \-1 を返します。 .Pp .Fa mode が .Dv LIO_NOWAIT の場合には、 .Fn lio_listio 関数は成功して操作がキューに入れられると 0 を返し、 そうでなければ \-1 を返します。 .Sh エラー .Fn lio_listio 関数は以下の場合に失敗します: .Bl -tag -width Er .It Bq Er EAGAIN 要求をキューに入れるために十分なリソースがありません。 .It Bq Er EAGAIN 要求がシステムによる制限 .Dv AIO_MAX を超えさせます。 .It Bq Er EINVAL .Fa mode 引数が .Dv LIO_WAIT または .Dv LIO_NOWAIT のどちらでもありません。または、 .Fa nent が .Dv AIO_LISTIO_MAX よりも大きいです。 .It Bq Er EINTR 恐らく完了する前に、シグナルがシステムコールに割り込みました。 .It Bq Er EIO 1 つ以上の要求が失敗しました。 .El .Pp 加えて、 .Fn lio_listio 関数は .Xr aio_read 2 および .Xr aio_write 2 に記載されているあらゆる理由で失敗するかもしれません。 .Pp .Fn lio_listio が成功した場合、または .Er EAGAIN , EINTR , または .Er EIO のエラーコードで失敗した場合には、幾つかの要求が 既に開始されているかもしれません。 呼び出し側はそれぞれの .Vt aiocb のエラー状態を、個別に .Xr aio_error 2 を呼び出すことによって、チェックするべきです。 .Sh 関連項目 .Xr aio_error 2 , .Xr aio_read 2 , .Xr aio_write 2 , .Xr read 2 , .Xr write 2 , .Xr aio 4 .Sh 規格 .Fn lio_listio 関数は .St -p1003.1-2001 に適合しているはずです。