mmap-write.c

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>

#include "utils.h"

#define PAGE_SIZE 4096
#define MAP_FILEPATH "/tmp/ex-mmap"

int main(int argc, char *argv[])
{
    int fd = open(MAP_FILEPATH, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
    exit_if(fd == -1, MAP_FILEPATH);

    exit_if(ftruncate(fd, PAGE_SIZE) == -1, "Can't extend file");
    char *some_array = mmap(NULL, PAGE_SIZE, PROT_WRITE, MAP_SHARED, fd, 0);
    exit_if(some_array == MAP_FAILED, "Map failed");

    close(fd); // Once attached the fd is useless

    printf("Mapped region is %p\n", some_array);
    for (int i = 0; i < PAGE_SIZE; i++)
        some_array[i] = i % 10 + '0';

    exit_if(
            munmap(some_array, PAGE_SIZE) == -1,
            "Unmap failed");
    return 0;
}