#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>

/*Damit definieren wir die Startadresse im Arbeitspeicher
63 steht für die Startadresse des 63. MB im Arbeitspeicher*/
#define RAM_ADDRESS (63*0x100000)
/*Wir reservieren 16386 Bytes von dem einen MB*/
#define ALLOCA 16384

int main()
{
  char *mem_ptr;
  int fd, i;
  if ((fd=open("/dev/mem", O_RDWR)) < 0)
   {
     fprintf(stderr, "Fehler beim öffnen von /dev/mem\n");
     exit(1);
   }
  mem_ptr = (char *)mmap(0, ALLOCA, PROT_READ | PROT_WRITE,
                                    MAP_FILE | MAP_SHARED, f, ADDRESS);

  for (i=0; i<ALLOCA; i++)
     mem_ptr[i]=i; /*Wir befüllen den Speicher mit Zahlen*/

/*Wir lesen die Zahlen aus dem Hauptspeicher wieder*/
  for (i=0; i<ALLOCA; i++)
     printf("%d\n",mem_ptr[i]);
/*Wir geben den Speicherplatz wieder frei*/
  munmap(mem_pointer, ALLOCA);
  return 0;
}