下記のコードはmmapを使ったプロセス間通信の例なのですが、なぜ、下記のようにするとプロセス間でデータがやり取りできるのでしょうか?

for以下の所で*s(sの先頭)が10になるまで待ち、その後に子プロセスでは*s0を代入し、親プロセスでは*(s+1) = 'a'としています

なぜ、このような処理でプロセス間でデータのやり取りをしたことになるのでしょうか?

参考:知ってトクするシステムコール(5):システムコールを減らすシステムコール (2/2) - @IT


#include <unistd.h>
#include <sys/mman.h>
#include <stdio.h>

int main() {
    int i, rp=1000000;
    char *s;
    s = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
    *s = '0';
    if (0 == fork()) {
        for (i = 0; i < rp; i++) {
            while ('0' == *s)
                ;
            *s = '0';
        }
    }
    else {
        for (i = 0; i < rp; i++) {
            while ('1' == *s)
                ;
            *(s+1) = 'a';
            *s = '1';
        }
    }
}