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/ に書かれている。
関連キーワード
操作,
LIO,
lio,
aiocb,
listio,
list,
ブロック,
制御,
LISTIO,
完了
Linux マニュアル 一覧
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]
Index
- 名前
- 書式
- 説明
- 返り値
- エラー
- バージョン
- 属性
- 準拠
- 注意
- 関連項目
- この文書について
This document was created by man2html, using the manual pages.
Time: 12:08:35 GMT, June 11, 2022