Provided by: manpages-ja-dev_0.5.0.0.20210215+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/ に書かれている。