Manpages

名 前

msync − フ ァ イ ル を マ ッ プ し た メ モ リ ー と 同 期 さ せ る

書 式

#include <sys/mman.h>

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

説 明

msync() は mmap(2) を 使 っ て メ モ リ ー に マ ッ プ さ れ た フ ァ イ ル の 、 メ モ リ ー 上 の コ ピ ー に な さ れ た 変 更 を フ ァ イ ル シ ス テ ム に 反 映 さ せ る 。 こ の 関 数 を 使 用 し な い と 、 munmap(2) が 呼 び 出 さ れ る ま で 変 更 が 書 き 戻 さ れ る 保 証 は な い 。 よ り 正 確 に は 、 フ ァ イ ル の う ち addr か ら 始 ま り 長 さ length の メ モ リ ー 領 域 に 対 応 す る 部 分 が 更 新 さ れ る 。

flags 引 数 に は ビ ッ ト MS_ASYNC, MS_SYNC, MS_INVALIDATE を 設 定 す る こ と が で き る が 、 MS_ASYNCMS_SYNC を 同 時 に 指 定 す る こ と は で き な い 。 MS_ASYNC は 更 新 を 予 定 に 組 み 込 む こ と を 表 し 、 呼 び 出 し は 直 ち に 返 る 。 MS_SYNC は 更 新 を 要 求 し 、 更 新 が 完 了 す る ま で 待 つ 。 MS_INVALIDATE は (た っ た 今 書 き 込 ん だ 新 し い 値 で マ ッ ピ ン グ を 更 新 す る こ と が で き る よ う に ) 同 じ フ ァ イ ル に 対 す る 他 の マ ッ ピ ン グ を 無 効 に す る こ と を 要 求 す る 。

返 り 値

成 功 し た 場 合 、 0 が 返 る 。 エ ラ ー の 場 合 、 −1 が 返 り 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EBUSY

I flags に MS_INVALIDATE が 指 定 さ れ た が 、 指 定 さ れ た ア ド レ ス 範 囲 に ロ ッ ク が 存 在 す る 。

EINVAL

addr が PAGESIZE の 倍 数 で な い 。 ま た は 、 flagsMS_ASYNCMS_INVALIDATEMS_SYNC 以 外 の ビ ッ ト が 設 定 さ れ た 。 ま た は 、 flagsMS_SYNCMS_ASYNC の 両 方 が 設 定 さ れ た 。

ENOMEM

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

準 拠

POSIX.1−2001. こ の 関 数 は Linux 1.3.21 で 導 入 さ れ た が 、 ENOMEM で は な く EFAULT が 使 わ れ て い た 。 こ れ は Linux 2.4.19 で POSIX に お け る 値 ENOMEM に 変 更 さ れ た 。

可 用 性

msync() が 使 用 可 能 な POSIX シ ス テ ム で は _POSIX_MAPPED_FILES_POSIX_SYNCHRONIZED_IO の 両 方 が <unistd.h> で 0 よ り 大 き い 値 に 定 義 さ れ る 。 (sysconf(3) を 参 照 す る こ と 。 )

注 意

POSIX で は MS_SYNCMS_ASYNC の い ず れ か は 必 ず flags に 指 定 し な け れ ば な ら な い と さ れ て お り 、 実 際 に こ れ ら の フ ラ グ の い ず れ か を 指 定 し な か っ た 場 合 msync() が 失 敗 す る シ ス テ ム も あ る 。 し か し 、 Linux で は こ れ ら の フ ラ グ の い ず れ も 指 定 せ ず に msync() を 呼 び 出 す こ と が で き 、 そ の 場 合 の 動 作 は (現 在 の と こ ろ ) MS_ASYNC を 指 定 し た 場 合 と 等 価 で あ る 。 (Linux 2.6.19 以 降 で は MS_ASYNC は 実 際 に は no−op (何 も し な い 命 令 ) で あ る 。 こ れ は カ ー ネ ル が 正 し く dirty ペ ー ジ を 追 跡 し 、 必 要 に 応 じ て ス ト レ ー ジ に そ れ ら を フ ラ ッ シ ュ す る か ら で あ る 。 ) Linux の 動 作 に 関 係 な く 、 ア プ リ ケ ー シ ョ ン の 移 植 性 を 考 慮 し 、 将 来 も 確 実 に 動 く よ う に す る に は 、 MS_SYNCMS_ASYNC の い ず れ か を 必 ず flags に 指 定 す る よ う に す べ き で あ る 。

関 連 項 目

mmap(2)

B.O. Gallmeister, POSIX.4, O’Reilly, pp. 128−129 and 389−391.

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。