User`s guide
Shared Memory Between Processes [4]
}
mmap_addr = mmap(0, mmap_len, PROT_WRITE, MAP_ANON | MAP_SHARED, fd, 0);
if (MAP_FAILED == mmap_addr) {
printf("Unexpected error calling mmap: %s\n", strerror(errno));
close(fd);
exit(1);
}
int remember_ret = persist_remember(remember_path, mmap_len);
if(0 != remember_ret) {
printf("Unexpected error calling persist_remember: %s\n", strerror(remember_ret));
close(fd);
munmap(mmap_addr, mmap_len);
exit(1);
}
} else { // if ret is not -1 or 0, then it's the length of the mapped segment
fd = open(remember_path, O_CREAT | O_RDWR, 0600);
if (-1 == fd) {
printf("Unexpected error opening remember_path: %s\n", strerror(errno));
exit(1);
}
mmap_len = ret;
mmap_addr = mmap(0, mmap_len, PROT_WRITE, MAP_ANON | MAP_SHARED, fd, 0);
if (MAP_FAILED == mmap_addr) {
printf("Unexpected error calling mmap: %s\n", strerror(errno));
close(fd);
exit(1);
}
}
run_computation(mmap_addr, mmap_len, ret);
int forget_ret = persist_forget(remember_path, false);
if(0 != forget_ret) {
printf("Unexpected error calling persist_remember: %s\n", strerror(forget_ret));
}
if(0 != munmap(mmap_addr, mmap_len)) {
printf("Unexpected error calling munmap: %s\n", strerror(errno));
}
if(0 != close(fd)) {
printf("Unexpected error calling close: %s\n", strerror(errno));
}
return 0;
}
S–2479–20 51