LIO_LISTIO

Section: Linux Programmer's Manual (3)
Updated: 2020-04-11
Index JM Home Page
 

名前

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) 参照)。  

返り値

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

mode が LIO_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
mode が LIO_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/ に書かれている。

関連キーワード

操作   listio   list   制御   ブロック   開始   完了   個々   キュー   非同期   通知   write   read   ステータス   return   理由   struct   sigevent   構造体   opcode   正常   上限   シグナル   領域   リクエスト

Linux マニュアル 一覧

関連するコマンド・関数

aio_suspend.3   aio_write.3   aio_read.3   aio_error.3   aio_return.3   aio_fsync.3
 

Index

名前
書式
説明
返り値
エラー
バージョン
属性
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:07 GMT, October 11, 2026