MSYNC
Section: Linux Programmer's Manual (2)
Updated: 2020-06-09
Index
JM Home Page
roff page
名前
msync - ファイルをマップしたメモリーと同期させる
書式
#include <sys/mman.h>
int msync(void *addr, size_t length, int flags);
説明
msync() は mmap(2) を使ってメモリーにマップされたファイルの、
メモリー上のコピーになされた変更をファイルシステムに反映させる。 この関数を使用しないと、 munmap(2)
が呼び出されるまで変更が書き戻される保証はない。 より正確には、ファイルのうち addr から始まり長さ length
のメモリー領域に対応する部分が更新される。
The flags argument should specify exactly one of MS_ASYNC and
MS_SYNC, and may additionally include the MS_INVALIDATE bit. These
bits have the following meanings:
- MS_ASYNC
-
Specifies that an update be scheduled, but the call returns immediately.
- MS_SYNC
-
Requests an update and waits for it to complete.
- MS_INVALIDATE
-
Asks to invalidate other mappings of the same file (so that they can be
updated with the fresh values just written).
返り値
成功した場合、 0 が返る。エラーの場合、 -1 が返り、 errno が適切に設定される。
エラー
- EBUSY
-
I flags に MS_INVALIDATE が指定されたが、指定されたアドレス範囲にロックが存在する。
- EINVAL
-
addr が PAGESIZE の倍数でない。または、 flags に
MS_ASYNC、MS_INVALIDATE、MS_SYNC 以外のビットが設定された。 または、 flags に
MS_SYNC と MS_ASYNC の両方が設定された。
- ENOMEM
-
指定されたメモリー (またはその一部) がマップされていない。
準拠
POSIX.1-2001, POSIX.1-2008.
この関数は 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_SYNC と MS_ASYNC のいずれかは必ず flags に指定しなければならないとされており、
実際にこれらのフラグのいずれかを指定しなかった場合 msync() が失敗するシステムもある。 しかし、 Linux
ではこれらのフラグのいずれも指定せずに msync() を呼び出すことができ、 その場合の動作は (現在のところ) MS_ASYNC
を指定した場合と等価である。 (Linux 2.6.19 以降では MS_ASYNC は実際には no-op (何もしない命令) である。
これはカーネルが正しく dirty ページを追跡し、必要に応じてストレージにそれらをフラッシュするからである。) Linux
の動作に関係なく、アプリケーションの移植性を考慮し、将来も確実に動くようにするには、 MS_SYNC か MS_ASYNC のいずれかを必ず
flags に指定するようにすべきである。
関連項目
mmap(2)
B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- 関連項目
-
- この文書について
-
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023