名 前
aio_write − 非 同 期 で 書 き 込 む
書 式
#include <aio.h>
int aio_write(struct aiocb *aiocbp);
−lrt で リ ン ク す る 。
説 明
aio_write() 関 数 は 、 aiocbp が 指 す バ ッ フ ァ ー に 記 載 さ れ た I/O リ ク エ ス ト を キ ュ ー に 入 れ る 。 こ の 関 数 は write(2) の 非 同 期 版 で あ る 。 呼 び 出 し
write(fd, buf, count) の 各 引 き 数 は aiocb が 指 す 構 造 体 の aio_fildes, aio_buf, aio_nbytes に (こ の 順 序 で ) 対 応 す る (aiocb 構 造 体 の 説 明 は aio(7) を 参 照 )。
O_APPEND が 設 定 さ れ な い 場 合 、 カ レ ン ト の フ ァ イ ル オ フ セ ッ ト に 関 係 な く 、 デ ー タ は 絶 対 フ ァ イ ル オ フ セ ッ ト aiocbp−>aio_offset を 開 始 点 と し て 書 き 込 ま れ る 。 O_APPEND が 設 定 さ れ て い る 場 合 、 デ ー タ は フ ァ イ ル の 末 尾 に 、 aio_write() の 呼 び 出 し が 行 わ れ た の と 同 じ 順 序 で 書 き 込 ま れ る 。 こ の 呼 び 出 し の 後 の カ レ ン ト の フ ァ イ ル オ フ セ ッ ト は 規 定 さ れ て い な い 。 「 非 同 期 」 と は 「 リ ク エ ス ト が キ ュ ー に 入 れ ら れ た ら 、 こ の 呼 び 出 し は す ぐ に 返 る 」 と い う こ と で あ る 。 呼 び 出 し か ら 戻 っ た 時 に 、 書 き 込 み は 完 了 し て い る か も 知 れ な い し 、 完 了 し て い な い か も 知 れ な い 。 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 が 書 き 込 み の た め に オ ー プ ン さ れ た 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で は な い 。
EFBIG フ ァ イ ル は 通 常 の フ ァ イ ル で あ り 、 少 な く と も |
1 バ イ ト を 書 き 込 も う |
と し て い る 。 し か し 開 始 位 置 が 、 こ の フ ァ イ ル の 最 大 オ フ セ ッ ト と 同 じ か そ れ を 超 え て い る 。
EINVAL |
aio_offset, aio_reqprio, aio_nbytes の う ち 1 つ 以 上 が 無 効 で あ る 。 | ||
ENOSYS |
aio_write() は 実 装 さ れ て い な い 。 |
バ ー ジ ョ ン
The aio_write() 関 数 は glibc 2.1 以 降 で 利 用 で き る 。
準 拠
POSIX.1−2001, POSIX.1−2008.
注 意
使 用 す る 前 に 制 御 ブ ロ ッ ク を 0 に し て お く の は 、 よ い 考 え で あ る 。 こ の 制 御 ブ ロ ッ ク は 、 読 み 込 み 操 作 が 進 行 し て い る 間 は 変 更 す べ き で な い 。 読 み 込 ま れ る バ ッ フ ァ ー 領 域 は 操 作 の 最 中 に ア ク セ ス す べ き で は な い 。 さ も な い と 起 こ る 結 果 が 不 定 に な る 。 こ れ に 含 ま れ る メ モ リ ー 領 域 は 、 有 効 な ま ま に し な け れ ば な ら な い 。 同 じ aiocb 構 造 体 を 指 定 し て 同 時 に 複 数 の I/O 操 作 を 行 っ た 場 合 、 ど の よ う な 結 果 に な る か は 不 定 で あ る 。
関 連 項 目
aio_cancel(3), aio_error(3), aio_fsync(3), aio_read(3), aio_return(3), aio_suspend(3), lio_listio(3), aio(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。