fsync または fsync_range サブルーチン

目的

ファイル内の変更内容を永続記憶装置に書き込みます。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <unistd.h>

int fsync ( FileDescriptor)
int FileDescriptor;

int fsync_range (FileDescriptor, how, start, length)
int FileDescriptor;
int how;
off_t start;
off_t length;

説明

fsync サブルーチンは、 FileDescriptor パラメーターで指定されたオープン・ファイル内のすべての変更されたデータを永続記憶域に保管します。 FSYNC サブルーチンからの戻り時に、すべての更新が永続記憶域に保管されました。

fsync_range サブルーチンにより、 FileDescriptor パラメーターで指定されたオープン・ファイルの、指定された範囲内にあるすべての変更されたデータが、永続記憶域に保管されます。 同期範囲 サブルーチンからの戻り時に、指定された範囲内のすべての更新が永続記憶域に保管されました。

この段落では、JFS ファイル・システムでのみ使用可能な非推奨の機能について説明します。 据え置き更新のために ( O_DEFER (定義者) フラグを使用して) プロセスがオープンしたファイルに書き込まれたデータは、別のプロセスがこのファイルに対して 同期範囲 または FSYNC 呼び出しを発行するか、このファイルに対して同期 書き込み サブルーチンを ( 同期 (O_SYNC) フラグを使用して) 実行するまで、永続記憶域に書き込まれません。 O_DEFER フラグと O_SYNC フラグの説明については、それぞれ fcntl.h ファイルと open サブルーチンを参照してください。

注: FileDescriptor パラメーターによって識別されるファイルは、 fsync サブルーチンが発行されたとき、または呼び出しが失敗したときに、書き込みのためにオープンしていなければなりません。 この制限は BSD システムでは実施されませんでした。 同期範囲 サブルーチンは書き込みアクセスを必要としません。

パラメーター

項目 説明
FileDescriptor 有効なオープン・ファイル記述子。
どのように 操作の処理特性を指定します。
O_SYNC
< start、length> パラメーターで指定された範囲内の変更されたデータがストレージに書き込まれます。 メタデータが変更されると、変更されたすべてのユーザー・データがストレージに書き込まれます。 メタデータの変更およびファイル属性 (タイム・スタンプを含む) もストレージに書き込まれます。
O_DSYNC (非同期)
< start、length> パラメーターで指定された範囲内の変更されたデータがストレージに書き込まれます。 ファイルのメタデータが変更されている場合、データの読み取りが必要であれば、メタデータも書き込まれます。 それ以外の場合、メタデータの更新は行われません。
O_NOCACHE (キャッシュなし)
変更されたデータは、 O_DSYNC (非同期) パラメーターを使用して書き込まれます。 < start、length> パラメーターで指定された範囲内の全ページがメモリー・キャッシュから除去されます。 ページは、変更されていなくてもキャッシュから削除されます。 この操作は、読み取り専用にオープンされているファイルに対しても機能します。
start 開始ファイル・オフセット。
length 長さ、またはすべてのキャッシュ・データの場合はゼロ。

戻り値

正常終了すると、 FSYNC サブルーチンは値 0 を戻します。 そうでない場合は-1が返され、エラーを示すerrnoグローバル変数が設定される。

正常終了すると、 同期範囲 サブルーチンは値 0 を戻します。 そうでない場合は-1が返され、エラーを示すerrnoグローバル変数が設定される。

エラー・コード

以下の 1 つ以上が該当する場合、 FSYNC または 同期範囲 サブルーチンは失敗します。

項目 説明
EIO ファイル・システムの読み取り中または書き込み中に、入出力エラーが発生しました。
EBADF FileDescriptor パラメーターは、書き込み用にオープンされた有効なファイル記述子ではありません。
EINVAL ファイルは通常のファイルではありません。
EINTR サブルーチンがシグナルによって割り込まれました。