msync() - メモリーと物理ストレージとの同期化

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/mman.h>

int msync(void *addr, size_t len, int flags);

機能説明

msync() 関数は、[addr, addr + len) の範囲の ページの変更コピーをすべて基礎ハードウェアに 書き込むか、あるいはすべてのコピーを無効にします。その結果、それ以降のページへの参照が、ページの 永続記憶装置のロケーションからシステムによって取得されます。

flags 引数は以下のとおりです。
MS_ASYNC
非同期書き込みの実行
MS_INVALIDATE
マッピングの無効化
MS_SYNC
同期書き込みの実行
この関数は、現在の内容をメモリー領域に突き合わせるため、ファイルの内容を同期化します。
  • 呼び出しの前に行われたメモリー領域への書き込み参照は すべて、そのファイルに関するそれ以降の読み取り操作により 可視である。
  • 呼び出し以前のファイルの同一部分への書き込みが、メモリー領域への読み取り参照で可視であるかどうかは 未指定である。
  • 指定の範囲の未変更ページも基礎ハードウェアに 書き込まれるかどうかは未指定である。

flags が MS_ASYNC の場合、この関数は、すべての書き込み操作がスケジュールされるとただちに 戻ることができます。一方、flags が MS_SYNC の 場合、この関数は、すべての書き込み操作が完了するまで 戻りません。

MS_INVALIDATE は、現在のファイル内容を 突き合わせるため、メモリー領域の内容を同期化します。
  • 呼び出しの前に行われたファイルのマップ部分への書き込み はすべて、マップ済みメモリー領域へのそれ以降の 読み取り参照により可視である。
  • MAP_SHARED を使ってファイルの同じ部分にマップされたメモリー領域への、い ずれかのプロセスによる、呼び出し前の書き込み参照は、その領域の読み取り参照によっ て可視であるかどうかは未指定である。

msync() によりファイルへの書き込みが行われると、ファイルの st_ctime フィールドおよび st_mtime フィールドには、更新のマークが付きます。

戻り値

正常に実行された場合、msync() は 0 を戻します。

正常に実行されなかった場合、msync() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EINVAL
addr 引数が sysnonf の戻す ページ・サイズの倍数ではありません。
EIO
ファイル・システムの読み取り中または書き込み中に、入出力エラーが発生しました。
ENOMEM
[addr, addr + range [addr, addr + len) are len) の範囲の一部またはすべてのアドレスが、プロセスのアドレス・スペースで無効です。または、マップされていない ページが指定されています。

関連情報