我刚才在查看fork系统调用的行为,发现它非常令人困惑。我在一个网站上看到了以下内容:
Unix会制作父进程地址空间的精确副本并将其提供给子进程。因此,父进程和子进程有单独的地址空间。
上述程序的输出如下:
从上述声明中可以看出,子进程和父进程具有独立的地址空间。这就是为什么char值被单独打印,并且为什么我在子进程和父进程中看到变量的地址相同的原因。
请帮助我理解这个问题!
Unix会制作父进程地址空间的精确副本并将其提供给子进程。因此,父进程和子进程有单独的地址空间。
#include <stdio.h>
#include <sys/types.h>
int main(void)
{
pid_t pid;
char y='Y';
char *ptr;
ptr=&y;
pid = fork();
if (pid == 0)
{
y='Z';
printf(" *** Child process ***\n");
printf(" Address is %p\n",ptr);
printf(" char value is %c\n",y);
sleep(5);
}
else
{
sleep(5);
printf("\n ***parent process ***\n",&y);
printf(" Address is %p\n",ptr);
printf(" char value is %c\n",y);
}
}
上述程序的输出如下:
*** Child process ***
Address is 69002894
char value is Z
***parent process ***
Address is 69002894
char value is Y
从上述声明中可以看出,子进程和父进程具有独立的地址空间。这就是为什么char值被单独打印,并且为什么我在子进程和父进程中看到变量的地址相同的原因。
请帮助我理解这个问题!