2

给定以下代码:

#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

如果孩子更新arrand ptris his block 怎么可能?意思是,父进程更新arr[0]到发生1之前fork(),那么为什么更新ptr发生了而没有更新arr[0]到值2呢?

最好的祝福

4

2 回答 2

6

arr不是在父母和孩子之间共享的。
之后fork,他们每个人都有不同的副本。所以当孩子改变时arr,它不会影响父母。
您的共享内存调用会影响ptr,但不会arr

于 2012-07-23T07:15:57.507 回答
-1

数组不是指针!数组可以存储在堆栈上。检查汇编代码。

于 2012-07-23T07:11:02.750 回答