Cでmmapを使ったプロセス間通信
下記のコードはmmapを使ったプロセス間通信の例なのですが、なぜ、下記のようにするとプロセス間でデータがやり取りできるのでしょうか?
for
以下の所で*s
(sの先頭)が1
か0
になるまで待ち、その後に子プロセスでは*s
に0
を代入し、親プロセスでは*(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';
}
}
}