mincore - システムコールの説明 - Linux コマンド集 一覧表
名前
mincore - ページがコア内にあるか否かの情報を取得する
書式
#include <unistd.h>
#include <sys/mman.h>
int mincore(void *
start
, size_t
length
, unsigned char *
vec
);
説明
mincore
()関数は、ファイルのどのページがコアにあり、
ディスクアクセスなしで読むことができるかを表す配列を要求する。
カーネルは
start
アドレス以降の
length
バイトに関するデータを提供する。
返るとき、カーネルは
vec
をバイト列で埋める。
バイトの最下位ビットは、そのページがコアにあるか否かを示す
(その他のビットは未定義であり、将来使用されるかも知れないので予約されている)。
もちろん、これはスナップショットでしかない -
コア内にロックされないページは、
任意の時点でコア内に入ることも出ることも可能で、
この呼び出しから返る時には
vec
の内容が既に失効しているかも知れない。
mincore
()が成功するためには、
start
がページ境界になければならない。
最も近いページを指すように
start
の値を丸めるのは呼び出し側の責任である。
length
パラメータはページサイズの倍数である必要はない。
配列
vec
は (length+PAGE_SIZE-1) / PAGE_SIZE バイトを格納するのに
十分な大きさでなければならない。
ページサイズは
getpagesize
(2) で得られる。
返り値
成功した場合、 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.6.5) に至るまで、
mincore
()は MAP_PRIVATE マッピングについての正しい情報を返さない。
準拠
mincore ()は POSIX.1-2001 に記述されておらず、 全ての Unix 実装で利用可能であるわけではない。
履歴
mincore ()関数は 4.4BSD で初めて登場した。
有効性
Linux 2.3.99pre1 と glibc 2.2 から利用可能である。