#include #include #include #include #include #include #define MMAP_PROT (PROT_READ|PROT_WRITE) #define MMAP_FLAGS_PROBE (MAP_PRIVATE|MAP_ANONYMOUS) int main() { printf("I am master %d\n", (int) getpid()); size_t size = ((size_t)128U * (size_t)1024U); uintptr_t hint_addr = 0; void *p = mmap((void *)hint_addr, size, MMAP_PROT, MMAP_FLAGS_PROBE, -1, 0); printf ("nmap() = %p, hint_addr = %p\n", p, (void *) hint_addr); uintptr_t addr = (uintptr_t) p; munmap(p, size); // make sure there is an unmapped memory // hint_addr = addr; // produces no error hint_addr = addr + 1; p = mmap((void *)hint_addr, size, MMAP_PROT, MMAP_FLAGS_PROBE, -1, 0); printf ("nmap() = %p, hint_addr = %p\n", p, (void *) hint_addr); pid_t child_pid = fork(); if (child_pid < 0) { perror("fork failed"); } else if (child_pid == 0) { printf("I am worker %d\n", (int) getpid()); sleep(2); printf("worker exiting\n"); exit(0); } wait(NULL); printf("master exiting\n"); return 0; }