#include <time.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

#include <sys/mman.h>
#include <sys/stat.h>


int
main(int argc, char** argv)
{

	const char*		fname = "/mysham";
	const int		oflags = O_CREAT|O_RDWR;
	int			shm_fd = -1;
	const unsigned int	size = 4 * 1024;
	volatile int*		ptr = MAP_FAILED;



	shm_fd = shm_open(fname, oflags, (mode_t)0666);
	if (shm_fd<0) {
		perror("shm_open");
		shm_unlink(fname);
		goto fail;
	}

	if (ftruncate(shm_fd, (off_t)size)<0) {
		perror("ftruncate");
		goto fail;
	}
	
	ptr = mmap(0, (size_t)size, PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, (off_t)0);
	if (ptr == MAP_FAILED) {
		perror("mmap");
		goto fail;
	}

	ptr[0] = 100;
	
	printf("Success!\n");

	return 0;
fail:
	return 1;
}
