1 #define _GNU_SOURCE 1 2 #include <sys/mman.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <string.h> 6 #include <unistd.h> 7 8 int main(void) 9 { 10 /* first find free segment of 40K, then unmap it */ 11 void *initial_area = mmap((void *)0x10000000, 40960, PROT_READ|PROT_WRITE, 12 MAP_ANONYMOUS|MAP_PRIVATE,0,0); 13 14 if (initial_area == MAP_FAILED) 15 perror ("initial area"); 16 printf("initial_area= %p\n", initial_area); 17 if (munmap(initial_area, 40960) != 0) 18 perror ("munmap initial_area"); 19 20 /* remap the same segment, but with 4K size */ 21 void *area = mmap(initial_area, 4096, PROT_READ|PROT_WRITE, 22 MAP_ANONYMOUS|MAP_PRIVATE,0,0); 23 if (area == MAP_FAILED) 24 perror ("area"); 25 if (area != initial_area) 26 printf("FAILED : was expecting to get back the initial_area\n"); 27 printf("area= %p\n", area); 28 strcpy(area, "Hello World"); 29 30 /* extend it to 40K */ 31 void *a2 = mremap(area, 4096, 40960, 0); 32 if (a2 == MAP_FAILED) { 33 perror("mremap"); 34 } 35 if (a2 != initial_area) 36 printf("FAILED : was expecting to get back the same area increased\n"); 37 printf("increased area= %p\n", a2); 38 printf("%s\n", (char *)a2); 39 return 0; 40 } 41