MSYNC(2) |
FreeBSD System Calls Manual |
MSYNC(2) |
名称
msync —
マップされたリージョンを同期化する
ライブラリ
Standard C Library (libc, -lc)
書式
#include < sys/mman.h>
int
msync( void *addr, size_t len, int flags);
解説
msync() システムコールは、あらゆる修正されたページをファイルシステムに書き込み、ファイルの更新時刻を更新します。
len が 0 であるなら、
addr を含んでいるリージョン (region) 内の修正されたすべてのページは、フラッシュされます。
len が 0 でないなら、
addr と続く
len-1 の位置を含んでいるページだけが検査されます。
flags 引数は、次のように指定されます:
-
MS_ASYNC
-
直ちに返ります。
-
MS_SYNC
-
同期の書き込みを実行します。
-
MS_INVALIDATE
-
すべてのキャッシュされたデータを無効にします。
戻り値
The
msync() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable
errno is set to indicate the error.
エラー
msync() システムコールは、次の場合に失敗します:
-
[
EBUSY]
-
指定された領域のページのいくつかまたはすべてが、ロックされていて、
MS_INVALIDATE が指定されています。
-
[
EINVAL]
-
addr 引数が、ハードウェアのページサイズの倍数ではありません。
-
[
EINVAL]
-
len 引数が、大きすぎるか、または負です。
-
[
EINVAL]
-
flags 引数が MS_ASYNC と MS_INVALIDATE の両方でした。これらのフラグのうちの 1 つだけが許可されています。
-
[
EIO]
-
指定された領域で少なくとも 1 つのページを書き込んでいる間にエラーが生じました。
歴史
msync() システムコールは、
4.4BSD ではじめて登場しました。
バグ
BSD は、一貫性のあるファイルシステムバッファキャッシュを実装しているので、
msync() システムコールは、通常必要ではありません。しかしながら、ダーティ (汚い) VM ページとファイルシステムバッファを関連付けるために使用され、したがって、後ではなくすぐに物理的なメディアにそれらをフラッシュします。