#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <stdlib.h>

int main(void)
{
  char *buffer;
  int fd;

  printf ("pid=%d\n", getpid());
  getchar();
  buffer = mmap(NULL, 16*8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
  if (buffer == MAP_FAILED) {
   printf("Gasp\n");
   exit(1);
  }
  printf("Anonymous memory mapped @ %p\n", buffer);
  getchar();
  printf ("Writing at byte 0\n");
  buffer[0] = 'a';
  getchar();
  printf ("Writing at byte 534\n");
  buffer[534] = 'b';
  getchar();
  printf ("Writing at byte 4096\n");
  buffer[4096] = 'c';
  getchar();

  fd = open("koin", O_RDONLY);
  if (fd < 0) {
    printf("Gasp\n");
    exit(1);
  }
  buffer = mmap (NULL, 16, PROT_READ, MAP_PRIVATE, fd, 0);
  if (buffer == MAP_FAILED) {
    printf("Gasp\n");
    exit(1);
  }
  printf("File 'koin' mapped @ %p\n", buffer);
  getchar();
  printf ("%c%c%c%c%c\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);
  getchar();

  return 0;
}
