MSYNC(2)

名前
msync - ファイルをメモリ・マップと同期させる

書式
#include <unistd.h>
#include <sys/mman.h>

#ifdef _POSIX_MAPPED_FILES
#ifdef _POSIX_SYNCHRONIZED_IO

int msync(const void *start, size_t length, int flags);

#endif
#endif

説明
msync は mmap(2) を使用してメモリにマップされたファイルのメモリ上のコピーになされた変更を ディスクへと反映させる。 このコールを使用しなかった場合、 munmap(2) が呼び出されるまでは変更が書き出されるかどうかは保証されない。 より正確には、 start から始まり長さ length のメモリ領域に対応するファイル部分が更新される。 flags 引き数には MS_ASYNC, MS_SYNC, MS_INVALIDATE ビットが設定できる。 MS_ASYNC と MS_SYNC を同時には設定してはならない。 MS_ASYNC は更新を予定に組み込みコールからすぐに戻る。 MS_SYNC は更新が完了するまで待つことを要求する。 MS_INVALIDATE は同じファイルへの他のマッピングを無効にすることを要求する。 (今、書き込んだ新鮮な値で更新することができるように。)

返り値
成功した場合がゼロが返される。エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

EINVAL
    start が PAGESIZE の倍数になっていないか、MS_ASYNC | MS_INVALIDATE | MS_SYNC 以外のビットが flags に設定された。

EFAULT
    指定されたメモリ(またはその一部)がマップされていない。

準拠
POSIX.1b (以前の POSIX.4)

関連項目
mmap(2), B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.