gpt4 book ai didi

c - 当我们在c中使用fork时,进程之间是否共享数据?

转载 作者:行者123 更新时间:2023-11-30 16:20:28 27 4
gpt4 key购买 nike

在此 C 程序中,数据不在进程(即父进程和子进程)之间共享。子进程有自己的数据,父进程有自己的数据,但指针显示两个进程的相同地址。它是如何在后台完成的? 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;
}

这是程序的输出。

 1  Child Array:    5   4   3   2   1   
2 Array ptr = 0x7fff06c9f670
3 Parent Array: 1 2 3 4 5
4 Array ptr = 0x7fff06c9f670

当子进程修改数组时,它也应该修改父进程的数据。后台发生了什么?

最佳答案

当您fork一个新进程时,新的子进程是父进程的副本。这就是为什么指针等是相等的。由于虚拟内存的神奇之处,两个进程可以拥有相同的内存映射,但仍然使用不同的内存。

关于c - 当我们在c中使用fork时,进程之间是否共享数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55300391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com