名 前
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 を 超 え て し ま う 状 況 で あ っ た 。
EINVAL |
mode が 不 正 で あ る か 、 nitems が 上 限 AIO_LISTIO_MAX を 超 え て い る 。 | ||
EINTR |
mode が LIO_WAIT で 、 全 て の I/O 操 作 が 完 了 す る 前 に シ グ ナ ル が 捕 捉 さ れ た (非 同 期 I/O の 完 了 通 知 に 使 用 さ れ る シ グ ナ ル の 場 合 も こ れ に 該 当 す る )。 | ||
EIO |
aiocb_list で 指 定 さ れ た 操 作 の 中 に 失 敗 し た も の が あ っ た 。 ア プ リ ケ ー シ ョ ン は 、 aio_return(3) を 使 用 し て 、 個 々 の 操 作 の ス テ ー タ ス を 確 認 す る こ と が で き る 。 |
lio_listio が エ ラ ー EAGAIN, EINTR, EIO で 失 敗 し た 場 合 、 aiocb_list で 指 定 し た 操 作 の い く つ か は 開 始 さ れ て い る こ と が あ る 。 lio_listio が 他 の 理 由 で 失 敗 し た 場 合 に は 、 ど の I/O 操 作 も 開 始 さ れ て い な い 。
バ ー ジ ョ ン
The lio_listio() 関 数 は glibc 2.1 以 降 で 利 用 で き る 。
準 拠
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 プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。