我有一个程序与一个父进程和一个子进程。在fork()之前,父进程称为malloc(),并用一些数据填充数组。在fork()之后,孩子需要该数据。我知道我可以使用一个管道,但以下代码似乎工作:
#include
#include
#include
#include
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()手册页,但它没有具体提到在堆上动态分配的内存。
谢谢