kazmax - Linux で自宅サーバー

mincore - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. バグ
  7. 準拠
  8. 履歴
  9. 有効性
  10. 関連項目

名前

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 から利用可能である。

関連項目