Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       mincore - ページがメモリー内にあるかどうかを判定する

書式

       #include <unistd.h>
       #include <sys/mman.h>

       int mincore(void *addr, size_t length, unsigned char *vec);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       mincore():
           glibc 2.19 以降:
               _DEFAULT_SOURCE
           Glibc 2.19 以前:
               _BSD_SOURCE || _SVID_SOURCE

説明

       mincore()   は、呼び出し元プロセスの仮想メモリーのページがコア (RAM) 内に存在し、 ページ参
       照時にディスクアクセス (ページフォールト) を起こさないか  どうかを示すベクトルを返す。カー
       ネルは、アドレス addr から始まる length バイトの範囲のページに関する存在情報を返す。

       addr  引数はシステムのページサイズの倍数でなければならない。 length 引数はページサイズの倍
       数である必要はないが、 ページ全体に関する存在情報が返されるので、事実上 length  はページサ
       イズの倍数に切り上げられることになる。  ページサイズ (PAGE_SIZE)  は sysconf(_SC_PAGESIZE)
       を使って入手できる。

       vec 引数は、少なくとも (length+PAGE_SIZE-1) / PAGE_SIZE バイトが格納できる配列を指していな
       ければならない。  この呼び出しが返るとき、  各バイトの最下位ビットは、対応するページがメモ
       リー内にそのとき存在すれば  セットされ、そうでない場合はクリアされる   (各バイトのその他の
       ビットは未定義であり、これらのビットは将来の使用に   そなえて予約されている)。  もちろん、
       vec   で返された情報はスナップショットでしかない。    メモリー内にロックされていないページ
       は、任意の時点でメモリー内に 入ったり出たりでき、この呼び出しが返るときには vec の内容はす
       でに古くなっているかもしれない。

返り値

       成功した場合、 mincore()  は 0 を返す。 エラーの場合は -1 を返して、 errno  を適切な値に設
       定する。

エラー

       EAGAIN カーネルが一時的にリソースを使い果たしている。

       EFAULT vec が無効なアドレスを指している。

       EINVAL addr がページサイズの倍数でない。

       ENOMEM length  が (TASK_SIZE - addr)  より大きい。 (length に負の値が指定された場合、 その
              値が大きな符号なし整数として解釈されるために起こることがある。)  Linux 2.6.11  以前
              では、この条件の場合はエラー EINVAL が返されていた。

       ENOMEM addr から addr + length の間にマップされていないメモリーがあった。

バージョン

       Linux 2.3.99pre1 と glibc 2.2 から利用可能である。

準拠

       mincore()  は POSIX.1 に記述されておらず、 全ての UNIX 実装で利用可能であるわけではない。

バグ

       カーネル   2.6.21  より前は、  mincore()   は、  MAP_PRIVATE  マッピングや非線形マッピング
       (remap_file_pages(2)  を使って作成される) について正しい情報を返さなかった。

関連項目

        fincore(1), madvise(2), mlock(2), mmap(2), posix_fadvise(2), posix_madvise(3)

この文書について

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