Skip to content

Instantly share code, notes, and snippets.

@XiangpengHao
Last active February 6, 2020 22:29
Show Gist options
  • Save XiangpengHao/2557d54dd609cc351d1a76842cfd4d2c to your computer and use it in GitHub Desktop.
Save XiangpengHao/2557d54dd609cc351d1a76842cfd4d2c to your computer and use it in GitHub Desktop.
#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