Unix-system-calls-fsync

提供:Dev Guides
移動先:案内検索

[top]#

|http://www.google.com/[Google] | a|

Web This Site
  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

[cols=",,,,,,,",]

| |  Home   | |  References   | |  Discussion Forums   | |  About TP  

[width="100%",cols="100%",]

a| == fsync()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

fsync、fdatasync-ファイルのインコア状態をストレージデバイスと同期します

概要

#include <unistd.h> int fsync(int fd); int fdatasync(int fd);

説明

*fsync* ()は、ファイル記述子_fd_によって参照されるファイルのすべての修正されたインコアデータ(つまり、修正されたバッファキャッシュページ)を、そのファイルのあるディスクデバイス(または他の永続ストレージデバイス)に転送(「フラッシュ」)常駐します。 デバイスが転送の完了を報告するまで、呼び出しはブロックされます。 また、ファイルに関連付けられているメタデータ情報もフラッシュします( *stat* (2)を参照)。
*fsync* ()を呼び出しても、ファイルを含むディレクトリのエントリがディスクに到達したことを必ずしも保証するわけではありません。 そのためには、ディレクトリのファイル記述子の明示的な *fsync* ()も必要です。
*fdatasync* ()は *fsync* ()に似ていますが、その後のデータ取得を正しく処理するためにメタデータが必要でない限り、変更されたメタデータをフラッシュしません。 たとえば、_st_atime_または_st_mtime_(それぞれ、最終アクセス時刻および最終変更時刻。 *stat* (2)を参照)への変更は、後続のデータ読み取りを正しく処理するために必要ないため、フラッシュを必要としません。 一方、ファイルサイズ( *ftruncate* (2)などで作成された_st_size_)を変更するには、メタデータをフラッシュする必要があります。
*fdatasync* (2)の目的は、すべてのメタデータをディスクと同期する必要のないアプリケーションのディスクアクティビティを減らすことです。

返り値

成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。

エラー

Tag Description
EBADF fd is not a valid file descriptor open for writing.
EIO An error occurred during synchronization.
EROFS, EINVAL fd is bound to a special file which does not support synchronization.

ノート

基になるハードディスクの書き込みキャッシュが有効になっている場合、 fsync ()/fdatasync ()が返されるときに、データが実際に永続的なストレージにない場合があります。

ext2ファイルシステムが_sync_オプションでマウントされると、ディレクトリエントリも fsync ()によって暗黙的に同期されます。

2.4より前のカーネルでは、大きなファイルの fsync ()は非効率的です。 別の方法としては、_O_SYNC_フラグを使用して open (2)することもできます。

準拠

POSIX.1-2001

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

|  

[cols="^",]

|Advertisements