.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
.\" Updated 2013-05-07, Akihiro MOTOKI <amotoki@gmail.com>
.\"
-.TH MMAP 2 2013\-04\-17 Linux "Linux Programmer's Manual"
+.TH MMAP 2 2014\-08\-19 Linux "Linux Programmer's Manual"
.SH 名前
mmap, munmap \- ファイルやデバイスをメモリにマップ/アンマップする
.SH 書式
.SH エラー
.TP
\fBEACCES\fP
-以下のいずれかの場合。 ファイル記述子の参照先が通常のファイルではない (non\-regular file) 。 \fBMAP_PRIVATE\fP
-を要求したが \fIfd\fP は読み込み用にオープンされていない。 \fBMAP_SHARED\fP を要求して \fBPROT_WRITE\fP をセットしたが
-\fIfd\fP は読み書きモード (\fBO_RDWR\fP) でオープンされていない、 \fBPROT_WRITE\fP をセットしたが、ファイルは追加
-(append) 専用である。
+以下のいずれかの場合。 ファイル記述子の参照先が通常のファイルではない (non\-regular file) 。 ファイルマッピングを要求したが
+\fIfd\fP は読み込み用にオープンされていない。 \fBMAP_SHARED\fP を要求して \fBPROT_WRITE\fP をセットしたが \fIfd\fP
+は読み書きモード (\fBO_RDWR\fP) でオープンされていない、 \fBPROT_WRITE\fP をセットしたが、ファイルは追加 (append)
+専用である。
.TP
\fBEAGAIN\fP
ファイルがロックされている。またはロックされているメモリが多すぎる (\fBsetrlimit\fP(2) を参照)。
システム全体でオープンされているファイルの総数が上限に達した。
.TP
\fBENODEV\fP
-The underlying filesystem of the specified file does not support memory
-mapping.
+指定されたファイルが置かれているファイルシステムがメモリマッピングをサポート していない。
.TP
\fBENOMEM\fP
メモリに空きがない、または処理中のプロセスのマッピング数が最大数を超過した。
.TP
\fBEPERM\fP
.\" (Since 2.4.25 / 2.6.0.)
-The \fIprot\fP argument asks for \fBPROT_EXEC\fP but the mapped area belongs to a
-file on a filesystem that was mounted no\-exec.
+\fIprot\fP 引き数は \fBPROT_EXEC\fP を行うように指定されているが、 no\-exec でマウントされたファイルシステム上のファイルに
+マップ領域が対応している。
+.TP
+\fBEPERM\fP
+操作が file seal により禁止されている。 \fBfcntl\fP(2) 参照。
.TP
\fBETXTBSY\fP
\fBMAP_DENYWRITE\fP がセットされているが \fIfd\fP で指定されているオブジェクトは書き込み用に開かれている。
\fB_POSIX_MAPPED_FILES\fP は <unistd.h> で 0 より大きな値に定義される (\fBsysconf\fP(3)
も参照のこと)。
.SH 注意
-.\" Since around glibc 2.1/2.2, depending on the platform.
-このページでは glibc の \fBmmap\fP() のラッパー関数が提供するインターフェースに
-ついて説明している。元々は、この関数は同じ名前のシステムコールを起動していた。
-カーネル 2.4 以降、このシステムコールは \fBmmap2\fP(2) に取って代わられ、現在
-では、 glibc の \fBmmap\fP() のラッパー関数は \fIoffset\fP を適切に調整してから
-\fBmmap2\fP(2) を起動する。
-
(i386 などの) いくつかのアーキテクチャでは、 \fBPROT_WRITE\fP をセットすると、暗黙のうちに \fBPROT_READ\fP
がセットされる。 \fBPROT_READ\fP をセットした際に暗黙のうちに \fBPROT_EXEC\fP がセットされるかどうかは、アーキテクチャ依存である。
移植性を考慮したプログラムでは、 新規にマップした領域でコードを実行したい場合は、常に \fBPROT_EXEC\fP をセットすべきである。
にならないように選択される。 \fBMAP_FIXED\fP フラグが指定され、かつ \fIaddr\fP が 0 (NULL)
の場合には、マップされるアドレスが 0 (NULL) になる。
+.\"
特定の \fIflags\fP 定数は \fB_BSD_SOURCE\fP か \fB_SVID_SOURCE\fP のいずれかが定義された場合にのみ定義される。
(\fB_GNU_SOURCE\fP も定義されている必要がある。これらのフラグはすべて Linux 固有のものなので、 特に \fB_GNU_SOURCE\fP
を必要とする点はもっと論理的に決められるべきであった。) 関係するフラグは \fBMAP_32BIT\fP, \fBMAP_ANONYMOUS\fP
(とその同義語の \fBMAP_ANON\fP), \fBMAP_DENYWRITE\fP, \fBMAP_EXECUTABLE\fP, \fBMAP_FILE\fP,
\fBMAP_GROWSDOWN\fP, \fBMAP_HUGETLB\fP, \fBMAP_LOCKED\fP, \fBMAP_NONBLOCK\fP,
\fBMAP_NORESERVE\fP, \fBMAP_POPULATE\fP, \fBMAP_STACK\fP である。
+.SS "C ライブラリとカーネル ABI の違い"
+.\" Since around glibc 2.1/2.2, depending on the platform.
+このページでは glibc の \fBmmap\fP() のラッパー関数が提供するインターフェースに
+ついて説明している。元々は、この関数は同じ名前のシステムコールを起動していた。
+カーネル 2.4 以降、このシステムコールは \fBmmap2\fP(2) に取って代わられ、現在
+では、 glibc の \fBmmap\fP() のラッパー関数は \fIoffset\fP を適切に調整してから
+\fBmmap2\fP(2) を起動する。
.SH バグ
Linux においては、上記の \fBMAP_NORESERVE\fP で述べられているような保証はない。
デフォルトでは、システムがメモリを使い切った場合には、 どのプロセスがいつ強制終了されるか分からないからである。
以下のプログラムは、一番目のコマンドライン引き数で指定された ファイルの一部を標準出力に表示する。
表示する範囲は、二番目、三番目のコマンドライン引き数で渡される オフセットと長さで指定される。
このプログラムは、指定されたファイルの必要なページのメモリ・ マッピングを作成し、 \fBwrite\fP(2) を使って所望のバイトを出力する。
+.SS プログラムのソース
.nf
-
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
}
.fi
.SH 関連項目
-\fBgetpagesize\fP(2), \fBmincore\fP(2), \fBmlock\fP(2), \fBmmap2\fP(2), \fBmprotect\fP(2),
-\fBmremap\fP(2), \fBmsync\fP(2), \fBremap_file_pages\fP(2), \fBsetrlimit\fP(2),
-\fBshmat\fP(2), \fBshm_open\fP(3), \fBshm_overview\fP(7)
+\fBgetpagesize\fP(2), \fBmemfd_create\fP(2), \fBmincore\fP(2), \fBmlock\fP(2),
+\fBmmap2\fP(2), \fBmprotect\fP(2), \fBmremap\fP(2), \fBmsync\fP(2),
+\fBremap_file_pages\fP(2), \fBsetrlimit\fP(2), \fBshmat\fP(2), \fBshm_open\fP(3),
+\fBshm_overview\fP(7)
\fBproc\fP(5) の \fI/proc/[pid]/maps\fP, \fI/proc/[pid]/map_files\fP,
\fI/proc/[pid]/smaps\fP の説明。
+B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128\-129 and 389\-391.
.\"
.\" Repeat after me: private read-only mappings are 100% equivalent to
.\" shared read-only mappings. No ifs, buts, or maybes. -- Linus
-B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128\-129 and 389\-391.
-.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。