Ejemplo n.º 1
0
int main(int argc, char **argv)
{
	int fd1, fd2, *ptr1, *ptr2;
	pid_t childpid;
	struct stat stat;

	if (argc != 2)
		err_quit("Usage: test2 <name>");

	Shm_unlink(Px_ipc_name(argv[1]));
	fd1 = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_EXCL, FILE_MODE);
    Ftruncate(fd1, sizeof(int));
	fd2 = Open("./shm", O_RDONLY);
	Fstat(fd2, &stat);

	if ((childpid = Fork()) == 0) {
		ptr2 = Mmap(NULL, stat.st_size, PROT_READ, MAP_SHARED, fd2, 0);
		ptr1 = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd1, 0);
		printf("child: shm ptr = %p, motd ptr = %p\n", ptr1, ptr2);

		sleep(5);
		printf("shared memory integer = %d\n", *ptr1);
		exit(0);
	}
	
	//parent: map in reverse order from child
	ptr1 = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd1, 0);
	ptr2 = Mmap(NULL, stat.st_size, PROT_READ, MAP_SHARED, fd2, 0);
	*ptr1 = 777;
	Waitpid(childpid, NULL, 0);
	
	exit(0);
}
Ejemplo n.º 2
0
int
main(int argc, char **argv)
{
	if (argc != 2)
		err_quit("usage: shmunlink <name>");

	Shm_unlink(argv[1]);

	exit(0);
}
Ejemplo n.º 3
0
int unlink_shmfile(const char *name){
	// See notes from create_shmfile() on why we do this differently on
	// FreeBSD and Linux.
#ifdef LIB_COMPAT_FREEBSD
	if(Shm_unlink(name)){
		return -1;
	}
#else
#ifdef LIB_COMPAT_LINUX
	if(Unlink(name)){
		return -1;
	}
#else
	bitch("No support for %s on this OS\n",name);
	return -1;
#endif
#endif
	return 0;
}