SIMPLE SOLUTIONS

FSYNC(2) - Linux manual

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

2014-08-19
FSYNC(2) Linux Programmer's Manual FSYNC(2)

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/ に書かれている。
Linux 2014-08-19 FSYNC(2)
fsync(2).txt (日本語 / Japanese)
Index English version of fsync(2)
Go top