#include <sys/mman.h>
#include <unistd.h>
#include <cstddef>
#include <iostream>
#include <limits>
#include <stdexcept>
int main() {
    const long queried=::sysconf(_SC_PAGESIZE);
    if(queried<=0) throw std::runtime_error("page size");
    const auto page=static_cast<std::size_t>(queried);
    if(page>std::numeric_limits<std::size_t>::max()/2) throw std::runtime_error("size");
    void* region=::mmap(nullptr,page*2,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0);
    if(region==MAP_FAILED) throw std::runtime_error("mmap");
    auto* bytes=static_cast<unsigned char*>(region);
    bytes[page-1]=7; bytes[page]=9;
    const int first=bytes[page-1],second=bytes[page];
    if(::munmap(region,page*2)!=0) throw std::runtime_error("munmap");
    if(first!=7 || second!=9) throw std::runtime_error("boundary");
    std::cout<<"boundary="<<first<<','<<second<<'\n';
}
