Tentando gravar em um int na memória compartilhada (usando mmap) com um processo filho

Eu estou brincando com algum código que requer comunicação entre um pai e um processo filho bifurcado. Eu criei um int na memória compartilhada antes da bifurcação, mas qualquer alteração que eu faça com o processo filho não parece afetar o int quando acessado pelo processo pai. Aqui está um pedaço de código que ilustra o meu problema.

int * shared = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); 
pid_t child;
int childstate;
if((child=fork())==0){
      *shared = 1;
      exit(0);
}
waitpid (child, &childstate, 0); 
printf("%d",*shared);

Embora o processo filho defina o valor de 'compartilhado' como 1, este programa gera 0.

No meu programa atual, uma estrutura será compartilhada ao invés de um int, mas se eu puder descobrir esse trecho de código, acho que o resto deve se encaixar.

Eu não sou de forma alguma um programador experiente, e estou um pouco familiarizado com C. Passei horas tentando descobrir isso e ler dezenas de páginas que dizem que deveria ser um processo simples. Para ser honesto, tem sido um duro golpe para minha auto-estima :). Tenho certeza que estou sentindo falta de alguns pequenos detalhes - alguém pode apontar para mim? Agradeço antecipadamente pelo seu tempo.

questionAnswers(1)

yourAnswerToTheQuestion