名 前
readahead − 前 も っ て フ ァ イ ル を ペ ー ジ キ ャ ッ シ ュ に 読 み 込 む
書 式
#define
_GNU_SOURCE /* feature_test_macros(7) 参 照
*/
#include <fcntl.h>
ssize_t readahead(int fd, off64_t offset, size_t count);
説 明
readahead() は フ ァ イ ル の 先 読 み を 行 い 、 そ の フ ァ イ ル に 対 す る 後 の 読 み 込 み が キ ャ ッ シ ュ か ら 行 わ れ 、 デ ィ ス ク I/O で 停 止 し な い よ う に す る (こ の 条 件 を 満 た せ る の は 、 先 読 み は 十 分 早 く 行 わ れ 、 シ ス テ ム の 他 の 動 作 に よ り そ の 後 に キ ャ ッ シ ュ か ら ペ ー ジ が フ ラ ッ シ ュ さ れ な い 場 合 で あ る )。
fd 引 き 数 は 読 み 込 み を 行 う フ ァ イ ル を 識 別 す る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。 offset 引 き 数 は デ ー タ の 読 み 込 み 開 始 位 置 を 指 定 し 、 count は 読 み 込 む デ ー タ の バ イ ト 数 を 指 定 す る 。 デ ィ ス ク I/O は ペ ー ジ 単 位 で 実 行 さ れ る の で 、 実 際 に は offset は ペ ー ジ 境 界 に 切 り 下 げ ら れ 、 読 み 込 み バ イ ト 数 は (offset+count) よ り 小 さ く な い 次 の ペ ー ジ 境 界 ま で 切 り 上 げ ら れ る 。 readahead() は フ ァ イ ル の 末 尾 を 越 え た 範 囲 ま で 読 み 出 し を 行 う こ と は な い 。 fd で 参 照 さ れ た オ ー プ ン 済 の フ ァ イ ル の フ ァ イ ル オ フ セ ッ ト の 現 在 値 は 変 更 さ れ な い 。
返 り 値
readahead() は 成 功 す る と 0 を 返 す 。 失 敗 し た 場 合 −1 を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。
エ ラ ー
EBADF |
fd が 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 、 ま た は 読 み 込 み 用 に オ ー プ ン さ れ て い な い 。 | ||
EINVAL |
fd が 参 照 し て い る フ ァ イ ル が 、 readahead() を 行 う こ と が で き な い タ イ プ の フ ァ イ ル で あ っ た 。 |
バ ー ジ ョ ン
readahead() シ ス テ ム コ ー ル は Linux 2.4.13 で 登 場 し た 。 glibc で の サ ポ ー ト は glibc バ ー ジ ョ ン 2.3 以 降 で 行 わ れ て い る 。
準 拠
readahead() シ ス テ ム コ ー ル は Linux 固 有 で あ り 、 移 植 を 考 慮 し た プ ロ グ ラ ム で は 使 用 を 避 け る べ き で あ る 。
注 意
い く つ か の 32 ビ ッ ト ア ー キ テ ク チ ャ ー で は 、 こ の シ ス テ ム コ ー ル の 呼 び 出 し シ グ ネ チ ャ ー が 違 っ て い る 。 理 由 は syscall(2) で 説 明 さ れ て い る 。
バ グ
readahead() は 読 み 込 み を バ ッ ク グ ラ ウ ン ド で 行 う よ う に ス ケ ジ ュ ー リ ン グ を 行 い 、 す ぐ に 返 る 。 し か し な が ら 、 要 求 さ れ た ブ ロ ッ ク の 位 置 を 知 る た め に 必 要 な フ ァ イ ル シ ス テ ム の メ タ デ ー タ を 読 み 込 む 間 は readahead() は 停 止 す る こ と が あ る 。 こ れ は ext[234] で 大 き な フ ァ イ ル を エ ク ス テ ン ト で は な く 間 接 ブ ロ ッ ク を 使 う 場 合 に し ば し ば 発 生 し 、 要 求 し た デ ー タ が 読 み 込 ま れ る ま で 呼 び 出 し が 停 止 し て い る よ う に 見 え る 。
関 連 項 目
lseek(2), madvise(2), mmap(2), posix_fadvise(2), read(2)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。