次のコードを考えると:
#include <sys/types.h>
#include <sys/shm.h>
#include <stdio.h>
#include <sys/types.h>
int main()
{
int arr[100];
int shmid = shmget(IPC_PRIVATE, sizeof(int), 0600);
int *ptr = shmat(shmid, NULL, 0);
*ptr = 42;
arr[0] = 1;
if (fork())
{
wait(NULL);
printf("%d, %d\n",arr[0],*ptr);
}
else
{
arr[0] = 2;
*ptr = 1337;
}
return 0;
}
出力は次のとおり1,1337
です。
質問: なぜそうではないの2,1337
ですか?
arr
子供が自分のブロックを更新し、ブロックを更新した場合、それはどのようになるptr
でしょうか? つまり、親プロセスが が発生する前に更新さarr[0]
れたのに、なぜ の更新が行われ、 の値への更新が行われなかったのでしょうか?1
fork()
ptr
arr[0]
2
よろしくお願いします