Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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/ に書かれている。