Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       lio_listio - リストの I/O リクエストを開始する

書式

       #include <aio.h>

       int lio_listio(int mode, struct aiocb *const aiocb_list[],
                      int nitems, struct sigevent *sevp);

       -lrt でリンクする。

説明

       lio_listio() 関数は、配列 aiocb_list で指定された I/O 操作の リストをそれぞれ開始する。

       mode 引数には以下のいずれかの値を指定する。

       LIO_WAIT
              全ての操作が完了するまで、呼び出しは停止 (block) する。 sevp 引数は無視される。

       LIO_NOWAIT
              I/O  操作は処理を行うためのキューに入れられ、呼び出しは直ちに返る。 全ての I/O 操作
              が完了すると、 sevp 引数で指定した非同期通知が  行われる。詳細は  sigevent(7)  を参
              照。sevp が NULL の場合、 非同期通知は行われない。

       aiocb_list  引数は、I/O 操作を指定する aiocb 構造体へのポインター の配列である。指定された
       操作の実行順序は規定されていない。  nitems  引数は、配列  aiocb_list  の大きさを指定する。
       aiocb_list 内のヌルポインターは無視される。

       aiocb_list の各制御ブロックでは、 aio_lio_opcode フィールドで開始する I/O 操作を指定する。
       aio_lio_opcode には以下の値が指定できる。

       LIO_READ
              読み出し操作を開始する。操作はキューに入れられ、         この制御ブロックを指定して
              aio_read(3) の呼び出しが行われる。

       LIO_WRITE
              書き込み操作を開始する。操作はキューに入れられ、         この制御ブロックを指定して
              aio_write(3) の呼び出しが行われる。

       LIO_NOP
              この制御ブロックを無視する。

       各制御ブロックの残りのフィールドは、 aio_read(3) や aio_write(3)  の場合と同じ意味を持つ。
       各制御ブロックの aio_sigevent フィールドは、 個々の I/O 操作で通知方法を指定するのに使用さ
       れる (sigevent(7) 参照)。

返り値

       modeLIO_NOWAIT の場合、 lio_listio() は全ての操作が  正常にキューに入れられた場合に  0
       を返す。 そうでない場合は、-1 が返り、 errno にエラーを示す値が設定される。

       modeLIO_WAIT の場合、 lio_listio() は全ての操作が 正常に完了した場合に 0 を返す。 そう
       でない場合は、-1 が返り、 errno にエラーを示す値が設定される。

       lio_listio()  の返り値から得られる情報は、関数呼び出し自体に関する  ものだけであり、個々の
       I/O  操作に関する情報は得られない。  個々の I/O 操作は失敗することがあるが、これにより他の
       I/O 操作が完了 しなくなるといったことはない。 aio_error(3) を使うと、 aiocb_list  の個々の
       I/O  操作のステータスを知ることができる。  ある  I/O  操作が完了すると、その終了ステータス
       はaio_return(3) を使う ことで取得できる。個々の I/O 操作は aio_read(3) や aio_write(3)  に
       書かれている理由で失敗する場合がある。

エラー

       lio_listio() 関数は以下の理由で失敗する。

       EAGAIN リソースが足りない。

       EAGAIN nitems で指定された数の I/O 操作を行うと、 非同期 I/O 操作の数が上限 AIO_MAX を超え
              てしまう状況であった。

       EINTR  modeLIO_WAIT で、全ての I/O 操作が完了する前にシグナルが捕捉された。  signal(7)
              参照。 (非同期 I/O の完了通知に使用されるシグナルの場合もこれに該当する)。

       EINVAL mode が不正であるか、 nitems が上限 AIO_LISTIO_MAX を超えている。

       EIO    aiocb_list     で指定された操作の中に失敗したものがあった。    アプリケーションは、
              aio_return(3) を使用して、 個々の操作のステータスを確認することができる。

       lio_listio がエラー EAGAIN, EINTR, EIO で失敗した場合、 aiocb_list  で指定した操作のいくつ
       かは開始されていることがある。 lio_listio が他の理由で失敗した場合には、 どの I/O 操作も開
       始されていない。

バージョン

       The lio_listio() 関数は glibc 2.1 以降で利用できる。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├─────────────────┼───────────────┼─────────┤
       │lio_listio()     │ Thread safety │ MT-Safe │
       └─────────────────┴───────────────┴─────────┘

準拠

       POSIX.1-2001, POSIX.1-2008.

注意

       使用前に制御ブロックを 0 で埋めるのは良い考えである。 I/O 操作の実行中は制御ブロックを変更
       してはならない。データの読み書き先 のバッファー領域に I/O 操作の実行中にアクセスしてはなら
       ない。さもないと、  どのような結果になるか分からない。また、関係するメモリー領域も有効な状
       態 のままにしておかなければならない。

       同じ  aiocb 構造体を指定して同時に複数の I/O 操作を行った場合、 どのような結果になるかは不
       定である。

関連項目

       aio_cancel(3), aio_error(3), aio_fsync(3),  aio_return(3),  aio_suspend(3),  aio_write(3),
       aio(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

                                            2020-04-11                              LIO_LISTIO(3)