Manpages

名 前

fsync − メ モ リ ー 上 に あ る フ ァ イ ル の 内 容 を ス ト レ ー ジ デ バ イ ス 上 の も の と 同 期 さ せ る

書 式

#include <unistd.h>

int fsync(int fd);

int fdatasync(int fd);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

fsync(): _BSD_SOURCE || _XOPEN_SOURCE
|| /* glibc 2.8 以 降 で は : */ _POSIX_C_SOURCE >= 200112L
fdatasync
(): _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500

説 明

fsync() は 、 フ ァ イ ル デ ィ ス ク リ プ タ ー fd で 参 照 さ れ る フ ァ イ ル の 、 メ モ リ ー 内 で 存 在 す る 修 正 さ れ た デ ー タ (つ ま り 修 正 さ れ た バ ッ フ ァ ー キ ャ ッ シ ュ ペ ー ジ ) を 、 デ ィ ス ク デ バ イ ス (ま た は そ の 他 の 永 続 ス ト レ ー ジ デ バ イ ス ) に 転 送 (「 フ ラ ッ シ ュ 」 ) し 、 こ れ に よ り 、 シ ス テ ム が ク ラ ッ シ ュ し た り 、 再 起 動 さ れ た 後 も 、 変 更 さ れ た 全 て の 情 報 が 取 り 出 せ る よ う に な る 。 「 フ ラ ッ シ ュ 」 に は 、 ラ イ ト ス ル ー (write through) や (存 在 す る 場 合 に は ) デ ィ ス ク キ ャ ッ シ ュ の フ ラ ッ シ ュ も 含 ま れ る 。 こ の 呼 び 出 し は 転 送 が 終 わ っ た と デ バ イ ス が 報 告 す る ま で ブ ロ ッ ク す る 。 ま た フ ァ イ ル に 結 び つ い た メ タ デ ー タ 情 報 (stat(2) 参 照 ) も フ ラ ッ シ ュ す る 。

fsync() の 呼 び 出 し は 、 フ ァ イ ル が 存 在 し て い る デ ィ レ ク ト リ の エ ン ト リ ー が デ ィ ス ク へ 書 き 込 ま れ た こ と を 保 証 す る わ け で は な い 。 保 証 す る た め に は 明 示 的 に そ の デ ィ レ ク ト リ の フ ァ イ ル デ ィ ス ク リ プ タ ー に 対 し て も fsync() す る 必 要 が あ る 。

fdatasync() は fsync() と 同 様 で あ る が 、 メ タ デ ー タ の 扱 い が 異 な る 。 fdatasync() は 、 そ れ 以 降 の デ ー タ 読 み 込 み を 正 し く 扱 う た め に そ の メ タ デ ー タ が 必 要 に な ら な い 限 り 、 変 更 さ れ た メ タ デ ー タ を フ ラ ッ シ ュ し な い 。 例 え ば 、 st_atime や st_mtime (そ れ ぞ れ 最 終 ア ク セ ス 時 刻 、 最 終 修 正 時 刻 ; stat(2) 参 照 ) の 変 更 は フ ラ ッ シ ュ を 必 要 と し な い 。 な ぜ な ら こ れ ら は そ れ 以 降 の デ ー タ 読 み 込 み を 正 し く 扱 う た め に 必 要 で は な い か ら で あ る 。 一 方 、 フ ァ イ ル サ イ ズ (ftruncate(2) で は st_size) の 変 更 は メ タ デ ー タ の フ ラ ッ シ ュ が 必 要 で あ る 。

fdatasync() の 狙 い は 、 全 て の メ タ デ ー タ を デ ィ ス ク と 同 期 す る 必 要 の な い ア プ リ ケ ー シ ョ ン に 対 し て 、 デ ィ ス ク ア ク セ ス を 減 ら す こ と で あ る 。

返 り 値

成 功 し た 場 合 、 こ れ ら の シ ス テ ム コ ー ル は ゼ ロ を 返 す 。 エ ラ ー の 場 合 、 −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EBADF

fd が 有 効 な オ ー プ ン さ れ た デ ィ ス ク リ プ タ ー で な い 。

EIO

同 期 操 作 の 間 に エ ラ ー が 発 生 し た 。

EROFS, EINVAL

fd が 同 期 操 作 を サ ポ ー ト し て な い 特 殊 な フ ァ イ ル を 参 照 し て い る 。

準 拠

4.3BSD, POSIX.1−2001.

可 用 性

fdatasync() が 利 用 可 能 な POSIX シ ス テ ム で は 、 _POSIX_SYNCHRONIZED_IO<unistd.h> で 0 よ り 大 き な 値 に 定 義 さ れ る (sysconf(3) 参 照 )。

注 意

(Linux は そ う で は な い が ) い く つ か の UNIX シ ス テ ム で は fd書 き 込 み 可 能 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な け れ ば な ら な い 。

Linux 2.2 以 前 で は 、 fdatasync() は fsync() と 等 価 で あ り 、 性 能 面 で の メ リ ッ ト は な い 。 古 い カ ー ネ ル や あ ま り 使 わ れ て い な い フ ァ イ ル シ ス テ ム の fsync() の 実 装 で は 、 デ ィ ス ク キ ャ ッ シ ュ を フ ラ ッ シ ュ す る 方 法 が 分 か ら な い 場 合 が あ る 。 そ の よ う な 場 合 に は 、 安 全 に 操 作 が 行 わ れ る こ と を 保 証 す る た め 、 hdparm(8)sdparm(8) を 使 っ て デ ィ ス ク キ ャ ッ シ ュ を 無 効 に す る 必 要 が あ る 。

関 連 項 目

bdflush(2), open(2), sync(2), sync_file_range(2), hdparm(8), mount(8), sync(1)

こ の 文 書 に つ い て

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