Last active
February 6, 2020 22:29
-
-
Save XiangpengHao/2557d54dd609cc351d1a76842cfd4d2c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <sys/mman.h> | |
#include <cstdint> | |
#include <iostream> | |
#include <sys/types.h> | |
#include <sys/stat.h> | |
#include <fcntl.h> | |
#include <cassert> | |
static const uint64_t pool_size = 1024ull * 1024 * 1024; | |
static const char *pool_path = "/mnt/pmem0/test_mmap"; | |
static void *pool_address = (void *)0x4f0000000000ull; | |
void *test_mmap(uint32_t mmap_flags) | |
{ | |
mmap_flags |= MAP_SYNC; | |
int fd = open(pool_path, O_CREAT | O_RDWR, 0666); | |
assert(fd >= 0); | |
int err_no = posix_fallocate(fd, 0, pool_size); | |
assert(err_no == 0); | |
auto pool_addr = mmap( | |
pool_address, pool_size, PROT_READ | PROT_WRITE, mmap_flags, fd, 0); | |
if (pool_addr == MAP_FAILED) | |
{ | |
switch (errno) | |
{ | |
case EINVAL: | |
std::cerr << "invalid value\t"; | |
break; | |
case EEXIST: | |
std::cerr << "range exists\t"; | |
break; | |
case EOPNOTSUPP: | |
std::cerr << "unknown flags\t"; | |
break; | |
default: | |
break; | |
} | |
} | |
else | |
{ | |
munmap(pool_address, pool_size); | |
} | |
return pool_addr; | |
} | |
int main(int argc, char *argv[]) | |
{ | |
std::cout << "MAP_SHARED_VALIDATE | MAP_FIXED: \t" << test_mmap(MAP_SHARED_VALIDATE | MAP_FIXED) << std::endl; | |
std::cout << "MAP_SHARED_VALIDATE | MAP_FIXED_NOREPLACE:\t" << test_mmap(MAP_SHARED_VALIDATE | MAP_FIXED_NOREPLACE) << std::endl; | |
std::cout << "MAP_SHARED| MAP_FIXED: \t" << test_mmap(MAP_SHARED | MAP_FIXED) << std::endl; | |
std::cout << "MAP_SHARED | MAP_FIXED_NOREPLACE: \t" << test_mmap(MAP_SHARED | MAP_FIXED_NOREPLACE) << std::endl; | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment