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)
システムコールではなく、このシステムコール
(
mmap2(2)) を起動する。
ia64 では、
offset
の単位は、実際にはシステムのページサイズであり、
4096 バイトではない。
関連項目¶
getpagesize(2),
mmap(2),
mremap(2),
msync(2),
shm_open(3)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。