У меня есть программа с родительским и дочерним процессами.До fork () родительский процесс вызывал malloc () и заполнял массив некоторыми данными.После fork () эти данные нужны ребенку.Я знаю, что могу использовать канал, но следующий код работает:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main( int argc, char *argv[] ) {
char *array;
array = malloc( 20 );
strcpy( array, "Hello" );
switch( fork() ) {
case 0:
printf( "Child array: %s\n", array );
strcpy( array, "Goodbye" );
printf( "Child array: %s\n", array );
free( array );
break;
case -1:
printf( "Error with fork()\n" );
break;
default:
printf( "Parent array: %s\n", array );
sleep(1);
printf( "Parent array: %s\n", array );
free( array );
}
return 0;
}
Вывод:
Parent array: Hello
Child array: Hello
Child array: Goodbye
Parent array: Hello
Я знаю, что данные, размещенные в стеке, доступны вдочерний, но кажется, что данные, размещенные в куче, также доступны дочернему элементу.И точно так же, дочерний элемент не может изменить данные родителя в стеке, дочерний элемент не может изменить данные родителя в куче.Поэтому я предполагаю, что ребенок получает собственную копию данных стека и кучи.
Всегда ли это так в Linux?Если да, то где находится документация, которая это поддерживает?Я проверил справочную страницу fork (), но она не упоминала динамически выделенную память в куче.
Спасибо