Manpages

名 前

aio_read − 非 同 期 で 読 み 込 む

書 式

#include <aio.h>

int aio_read(struct aiocb *aiocbp);

−lrt で リ ン ク す る 。

説 明

aio_read() 関 数 は 、 aiocbp が 指 す バ ッ フ ァ ー に 記 載 さ れ た I/O リ ク エ ス ト を キ ュ ー に 入 れ る 。 こ の 関 数 は read(2) の 非 同 期 版 で あ る 。 呼 び 出 し

read(fd, buf, count) の 各 引 き 数 は aiocb が 指 す 構 造 体 の aio_fildes, aio_buf, aio_nbytes に (こ の 順 序 で ) 対 応 す る (aiocb 構 造 体 の 説 明 は aio(7) を 参 照 )。 デ ー タ の 読 み 込 み は 、 カ レ ン ト の フ ァ イ ル オ フ セ ッ ト に 関 係 な く 、 絶 対 フ ァ イ ル オ フ セ ッ ト aiocbp−>aio_offset を 開 始 点 と し て 行 わ れ る 。 呼 び 出 し の 後 の カ レ ン ト の フ ァ イ ル オ フ セ ッ ト は 規 定 さ れ て い な い 。 「 非 同 期 」 と は 「 リ ク エ ス ト が キ ュ ー に 入 れ ら れ た ら 、 こ の 呼 び 出 し は す ぐ に 返 る 」 と い う こ と で あ る 。 呼 び 出 し か ら 戻 っ た 時 に 、 読 み 込 み は 完 了 し て い る か も 知 れ な い し 、 完 了 し て い な い か も 知 れ な い 。 aio_error(3) を 使 う こ と で 完 了 し た か を テ ス ト で き る 。 完 了 し た I/O 操 作 の 返 り 値 は aio_return(3) で 取 得 で き る 。 aiocbp−>aio_sigevent を 適 切 に 設 定 す る こ と で 、 I/O 完 了 の 非 同 期 通 知 は 受 け る こ と も で き る 。 詳 細 は sigevent(7) を 参 照 。

_POSIX_PRIORITIZED_IO が 定 義 さ れ て い て 、 か つ フ ァ イ ル が こ れ を サ ポ ー ト し て い る 場 合 、 非 同 期 操 作 は 呼 び 出 し た プ ロ セ ス の 優 先 度 か ら aiocbp−>aio_reqprio を 引 い た 優 先 度 で 登 録 (submit) さ れ る 。 フ ィ ー ル ド aiocbp−>aio_lio_opcode は 無 視 さ れ る 。 最 大 オ フ セ ッ ト を 超 え た 通 常 の フ ァ イ ル か ら は 、 何 も デ ー タ が 読 み 込 ま れ な い 。

返 り 値

成 功 し た 場 合 、 0 が 返 さ れ る 。 エ ラ ー の 場 合 、 リ ク エ ス ト は キ ュ ー に 入 れ ら れ ず 、 −1 が 返 さ れ て 、 errno が 適 切 に 設 定 さ れ る 。 エ ラ ー は 後 で の み 検 知 さ れ た 場 合 は 、 エ ラ ー は aio_return(3)aio_error(3) 経 由 で 報 告 さ れ る こ と に な る (aio_return(3) は 状 態 −1 を 返 し 、 aio_error(3) で エ ラ ー 状 態 — errno で 取 得 で き る EBADF の よ う な エ ラ ー 状 態 が 返 さ れ る )。

エ ラ ー

EAGAIN リ ソ ー ス が 足 り な い 。

EBADF

aio_fildes は 読 み 込 み の た め に オ ー プ ン さ れ た 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EINVAL

aio_offset, aio_reqprio, aio_nbytes の う ち 1 つ 以 上 が 無 効 で あ る 。

ENOSYS

aio_read() は 実 装 さ れ て い な い 。

EOVERFLOW フ ァ イ ル が 通 常 の フ ァ イ ル で あ り 、 フ ァ イ ル の 終 端 の 前 か ら 読 み 込 み を 開 始 し て 、 少 な く と も 1 バ イ ト を 読 み 込 も う と し た 。 し か し 開 始 位 置 が こ の フ ァ イ ル の 最 大 オ フ セ ッ ト を 超 え て い た 。

バ ー ジ ョ ン

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

準 拠

POSIX.1−2001, POSIX.1−2008.

注 意

使 用 す る 前 に 制 御 ブ ロ ッ ク を 0 に し て お く の は 、 よ い 考 え で あ る 。 こ の 制 御 ブ ロ ッ ク は 、 読 み 込 み 操 作 が 進 行 し て い る 間 は 変 更 す べ き で な い 。 読 み 込 ま れ る バ ッ フ ァ ー 領 域 は 操 作 の 最 中 に ア ク セ ス す べ き で は な い 。 さ も な い と 起 こ る 結 果 が 不 定 に な る 。 こ れ に 含 ま れ る メ モ リ ー 領 域 は 、 有 効 な ま ま に し な け れ ば な ら な い 。 同 じ aiocb 構 造 体 を 指 定 し て 同 時 に 複 数 の I/O 操 作 を 行 っ た 場 合 、 ど の よ う な 結 果 に な る か は 不 定 で あ る 。

aio(7) を 参 照 。

関 連 項 目

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

こ の 文 書 に つ い て

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