mmap2 -
ファイルやデバイスをメモリーにマップする
#include <sys/mman.h>
void *mmap2(void *addr, size_t length, int prot,
int flags, int fd, off_t pgoffset);
これはおそらくあなたが興味のあるシステムコールではないだろう。代わりに
mmap(2)
を見るとよい。そのページにはこのシステムコールを起動する
glibc の
ラッパー関数についての説明がある。
mmap2() システムコールは
mmap(2)
と同じインターフェースを提供する。ただ
し、最後の引数には、ファイルのオフセットを
(
mmap(2)
が行っている、バイト
単位ではなく) 4096
バイトを単位として指定する。
これにより、32
ビットの
off_t
を使うアプリケーションで
(2^44 バイトまでの)
大きなファイルをマップ
できるようになる。
成功した場合、
mmap2()
はマップされた領域へのポインターを返す。
エラーの場合は -1
が返されて、
errno
が適切に設定される。
- EFAULT
- ユーザー空間からデータを取得するときに問題があった。
- EINVAL
- (ページサイズが
4096
バイトでないプラットフォームにおいて)
offset * 4096
がシステムのページサイズの倍数ではない。
mmap2() は
mmap(2)
に載っているエラーを返すこともある。
mmap2() は、Linux 2.3.31
以降で使用可能である。
このシステムコールは
Linux 独自である。
このシステムコールが存在するアーキテクチャーでは、glibc
の
mmap()
のラッパー関数は、
mmap(2)
システムコールではなく、このシステムコール
( ) を起動する。
このシステムコールは
x86-64 には存在しない。
ia64 では、
offset
の単位は、実際にはシステムのページサイズであり、
4096 バイトではない。
getpagesize(2),
mmap(2),
mremap(2),
msync(2),
shm_open(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。