在这个C程序中,数据不在进程即父进程和子进程之间共享.child拥有它自己的数据,而parent拥有它自己的数据,但指针显示两个进程的相同地址.它是如何在后台完成的?fork是否生成相同数据的副本?如果是这样,那么我们对两个进程都有相同的指针地址.或者是由于为每个进程复制的静态分配数据而且每个进程的数据是独立的?我想知道它是如何完成的?
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
//Static Array
int X[] = {1,2,3,4,5};
int i, status;
//The fork call
int pid = fork();
if(pid == 0) //Child process
{
//Child process modifies Array
for(i=0; i<5; i++)
X[i] = 5-i;
//Child prints Array
printf("Child Array:\t");
for(i=0; i<5; i++)
printf("%d\t", X[i]);
printf("\nArray ptr = %p\n", X);
}
else //Parent process
{
// Wait for the child to terminate and let
// it modify and print the array
waitpid(-1, &status, 0);
//Parent prints Array
printf("Parent Array:\t");
for(i=0; i<5; i++)
printf("%d\t", X[i]);
printf("\nArray ptr = %p\n", X);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是程序的输出.
1 Child Array: 5 4 3 2 1
2 Array ptr = 0x7fff06c9f670
3 Parent Array: 1 2 3 4 5
4 Array ptr = 0x7fff06c9f670
Run Code Online (Sandbox Code Playgroud)
当子进程修改数组时,它也应该修改父进程的数据.后台发生了什么?
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |