#include #include #include #define N 20240 #define SIZE 4096 int main() { int k; for(k = 0; k < 10; k++) { int i = 0; int pid; unsigned char *mem = mmap(0, N*SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0); if(mem == MAP_FAILED) perror("mmap"); printf("pagesize: %d\n", getpagesize()); for(i = 0; i < N; i++) mem[i*SIZE] = i*1000000007ul; printf("pages allocated\n"); pid = fork(); if(pid == 0) { /* child */ for(i = 0; i < N; i++) mem[i*SIZE+1] = i; /* force copy */ printf("copy complete\n"); exit(0); } else if(pid == -1) { perror("fork"); } else { /* parent */ waitpid(pid, NULL, 0); } munmap(mem, N*SIZE); } }