FDATASYNC(2)

名前
fdatasync - ファイルのメモリ上のデータをディスク上のものと同期させる

書式
#include <unistd.h>

#ifdef _POSIX_SYNCHRONIZED_IO

int fdatasync(int fd);

#endif

説明
fdatasync は(システム・コールから戻る前に)ファイルの全てのデータ・バッファーを ディスクにフラッシュ(flush)する。これは fsync に似ているが、アクセス時刻のようなメタデータを更新しない。 データベースにアクセスしたり、ログ・ファイルに書き込むような アプリケーションはしばしば小さなデータの断片(例えばログ・ファイルの一行) を書き込み、それがハードディスクに物理的に格納されることを保証する ために、すぐに fsync を呼び出す。不幸なことに、 fsync は常に二回の書き込み操作を行なう: 一つは新しく書き込まれたデータを、 もう一つは inode の修正時刻を更新するために。修正時刻がトラザンクション に関係なければ、 fdatasync を使用することで不必要なディスクへの inode の書き込み処理を 避けることができる。

返り値
成功した場合はゼロを返される。エラーの場合は -1 を返し、 errno に適切な値が設定される。

エラー

EBADF
    fd が有効な書き込みのためにオープンされたファイル・ディスクリプターでない。

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

EIO 同期操作の間にエラーが起こった。

バグ
現在(Linux 2.0.23)のところ fdatasync は fsync に等しい。

準拠
POSIX1b (以前の POSIX.4)

関連項目
fsync(2), B.O. Gallmeister, POSIX.4, O'Reilly, pp. 220-223 and 343.