Я просто проверял поведение системного вызова fork, и мне это показалось очень запутанным.
я видел на сайте, что
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 печатается отдельно и почему я вижу, что адрес переменной одинаков как в дочерних, так и в родительских процессах.?
Пожалуйста, помогите мне понять это!