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

名前
remap_file_pages - 非線形ファイルマッピングを作成する。
書式
#define _GNU_SOURCE /* feature_test_macros(7) 参照 */
#include <sys/mman.h>
int remap_file_pages(void *addr, size_t size, int prot,
size_t pgoff, int flags);
説明
注意: このシステムコールは (Linux 3.16 以降で) 非推奨となっており、 やがてより低速なカーネル内でのエミュ
レーションに置き換えられる予定である。 このシステムコールを使用しているアプリケーションは少ないが、こうし
たアプリケーションは代替手段への移行を検討すべきである。
remap_file_pages() システムコールは非線形なマッピング、 つまりファイルのページがメモリー上で連続しない順
番でマップされる マッピングを作成するために使われる。 remap_file_pages() を使う方が mmap(2) を繰り返して
使うより優れている点は、 前者の方法ではカーネルが VMA (Virtual Memory Area, 仮想メモリー領域) データ構造
体を追加で作成する必要がないことである。
非線形マッピングを作成するためには、 以下のようなステップを実行する:
1. mmap(2) を使い、マッピングを作成する (このマッピングは最初は線形である)。 このマッピングは MAP_SHARED
フラグを指定して作成されなければならない。
2. remap_file_pages() を 1 回以上呼び出して、 マッピングのページとファイルのページの対応関係を再構成す
る。 ファイルの同じページをマッピング領域の複数の場所に マップすることが可能である。
pgoff と size 引き数は、マッピング内で再配置されるファイルの領域を指定する。 pgoff はファイルオフセットで
あり、単位はシステムのページサイズである。 size は領域の長さであり、単位はバイトである。
addr 引き数は 2 つの目的で使われる。 第 1 の目的は、この引き数によって再編成したいページの マッピングを識
別することである。 よって addr は mmap(2) の呼び出しで過去にマップされた領域内のアドレスでなければならな
い。 第 2 の目的は、 pgoff と size で識別されるファイルページが置かれる予定のアドレスを、 addr によって指
定することである。
addr と size に指定する値は、システムのページサイズの倍数とすべきである。 それ以外の場合、カーネルは「両
方」の値を 最も近いページサイズの倍数へ「切り下げる」。
prot 引き数は 0 に指定されなければならない。
flags 引き数は mmap(2) のものと同じ意味であるが、 MAP_NONBLOCK 以外の全てのフラグは無視される。
返り値
成功した場合、 remap_file_pages() は 0 を返す。 エラーの場合、-1 が返され、 errno が適切に設定される。
エラー
EINVAL addr が MAP_SHARED フラグを指定して作成された有効なマッピングを参照していない。
EINVAL addr, size, prot, pgoff のいずれかが不正である。
バージョン
remap_file_pages() システムコールは Linux 2.5.46 で登場した。 glibc でのサポートは glibc バージョン
2.3.3 で追加された。
準拠
remap_file_pages() システムコールは Linux 固有のものである。
注意
Linux 2.6.23 以降、 remap_file_pages() は tmpfs, hugetlbfs, ramfs などのインメモリーファイルシステム上に
のみ非線形マッピングを作成する。 裏にデータストアを持つファイルシステム上では、 remap_file_pages() は、
ファイルのどの部分がどのアドレスにマッピングされているかの調整が、 mmap(2) を使った場合ほど効率的ではな
い。
関連項目
getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告
に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
Linux 2014-05-28 REMAP_FILE_PAGES(2)