mmap_shared opens filename for reading and writing, maps the
whole file into memory, closes the file, writes the length of the file
to filesize and returns a pointer to the mapped file.
The file is mapped shared. Changes done to the mapped region are
written to disk and are visible to other processes reading from the file
or mapping the same file into memory.
The file is unmapped by the operating system if the process terminates.
It can also be manually unmapped by calling munmap from
To write changes to disk immediately, you can use msync from
If the file could not be opened or mapped, (void*)0 is returned.