#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>

int main(void)
{
    long page = sysconf(_SC_PAGESIZE);
    if (page <= 0) {
        fputs("cannot determine page size\n", stderr);
        return EXIT_FAILURE;
    }
    size_t length = (size_t)page;
    unsigned char *area = mmap(NULL, length, PROT_READ | PROT_WRITE,
                               MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
    if (area == MAP_FAILED) {
        perror("anonymous mmap");
        return EXIT_FAILURE;
    }
    int result = EXIT_SUCCESS;
    for (size_t i = 0; i < length; ++i) {
        if (area[i] != 0) {
            fputs("unexpected initial byte\n", stderr);
            result = EXIT_FAILURE;
            break;
        }
    }
    area[0] = 17;
    area[length - 1] = 29;
    printf("length=%zu first=%u last=%u\n", length,
           (unsigned)area[0], (unsigned)area[length - 1]);
    if (munmap(area, length) == -1) {
        perror("munmap");
        result = EXIT_FAILURE;
    }
    return result;
}
