给出以下代码:
#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
值{{1}}没有?
祝你好运
答案 0 :(得分:6)
arr
在fork
之后,每个人都有不同的副本。因此,当孩子改变arr
时,它不会影响父母
您的共享内存调用会影响ptr
,但不会影响arr
。
答案 1 :(得分:-1)
数组不是指针!数组可以存储在堆栈中。检查汇编代码。