MINCORE
Section: Linux Programmer's Manual (2)
Updated: 2007-07-26
Index
JM Home Page
roff page
名前
mincore - ページがメモリ内にあるかどうかを判定する
書式
#include <unistd.h>
#include <sys/mman.h>
int mincore(void *start, size_t length, unsigned char *vec);
glibc 向けの機能検査マクロの要件
(feature_test_macros(7)
参照):
mincore():
_BSD_SOURCE || _SVID_SOURCE
説明
mincore()
は、呼び出し元プロセスの仮想メモリのページがコア (RAM) 内に存在し、
ページ参照時にディスクアクセス (ページ・フォールト) を起こさないか
どうかを示すベクトルを返す。カーネルは、アドレス
start
から始まる
length
バイトの範囲のページに関する存在情報を返す。
start
引き数はシステムのページサイズの倍数でなければならない。
length
引き数はページサイズの倍数である必要はないが、
ページ全体に関する存在情報が返されるので、事実上
length
はページサイズの倍数に切り上げられることになる。
ページサイズ (PAGE_SIZE) は
sysconf(_SC_PAGESIZE)
を使って入手できる。
vec
引き数は、少なくとも (length+PAGE_SIZE-1) / PAGE_SIZE バイトが
格納できる配列を指していなければならない。
この呼び出しが返るとき、
各バイトの最下位ビットは、対応するページがメモリ内にそのとき存在すれば
セットされ、そうでない場合はクリアされる
(各バイトのその他のビットは未定義であり、これらのビットは将来の使用に
そなえて予約されている)。
もちろん、
vec
で返された情報はスナップショットでしかない。
メモリ内にロックされていないページは、任意の時点でメモリ内に
入ったり出たりでき、この呼び出しが返るときには
vec
の内容はすでに古くなっているかもしれない。
返り値
成功した場合、
mincore()
は 0 を返す。
エラーの場合は -1 を返して、
errno
を適切な値に設定する。
エラー
EAGAIN
カーネルが一時的にリソースを使い果たしている。
- EFAULT
-
vec
が無効なアドレスを指している。
- EINVAL
-
start
がページサイズの倍数でない。
- ENOMEM
-
length
が
(TASK_SIZE - start)
より大きい。
(length
に負の値が指定された場合、
その値が大きな符号なし整数として解釈されるために起こることがある。)
Linux 2.6.11 以前では、この条件の場合はエラー
EINVAL
が返されていた。
- ENOMEM
-
start
から
start
+
length
の間にマップされていないメモリがあった。
バージョン
Linux 2.3.99pre1 と glibc 2.2 から利用可能である。
準拠
mincore()
は POSIX.1-2001 に記述されておらず、
全ての Unix 実装で利用可能であるわけではない。
バグ
カーネル 2.6.21 より前は、
mincore()
は、
MAP_PRIVATE
マッピングや非線形マッピング
(remap_file_pages(2)
を使って作成される) について正しい情報を返さなかった。
関連項目
mlock(2),
mmap(2)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:52 GMT, November 19, 2007