- ファイルやデバイスをメモリマッピングする
- 以下、引数の説明
- fd--メモリマッピングするファイルのファイルディスクリプタ
- filename--ファイル名
- file_offset--ファイルのオフセット(このオフセット以降がメモリマッピングされる)
- addr--マッピングされるメモリの開始アドレス
- bytes--メモリマッピングされる範囲(file_offsetから(file_offset+bytes)までがマッピングされる)
- read_only--1なら読み込み可能。0なら読み込み/書き出し可能
- allow_exec--1なら実行可能。0なら実行不可。
char* os::map_memory(int fd, const char* file_name, size_t file_offset,
char *addr, size_t bytes, bool read_only,
bool allow_exec) {
int prot;
int flags;
if (read_only) {
prot = PROT_READ;
flags = MAP_SHARED;
} else {
prot = PROT_READ | PROT_WRITE;
flags = MAP_PRIVATE;
}
if (allow_exec) {
prot |= PROT_EXEC;
}
if (addr != NULL) {
flags |= MAP_FIXED;
}
char* mapped_address = (char*)mmap(addr, (size_t)bytes, prot, flags,
fd, file_offset);
if (mapped_address == MAP_FAILED) {
return NULL;
}
return mapped_address;
}