- 论坛徽章:
- 0
|
目的:子进程得到父进程某个变量的值。
程序如下:
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int a = 0;
int *p = NULL;
int iret = 0;
p = &a;
//输出a的地址
printf( "address=[%p]\n", &a );
//fork
iret = fork();
if( iret < 0 )
{
return -1;
}
else if( iret == 0 ) //子进程
{
printf( "child.address=[%p]\n", (void *) p );
printf( "child.pid=[%d] old a=[%d]\n", getpid(), a );
printf( "child.pid=[%d] new a=[%d]\n", getpid(), *p );
sleep( 10 );
printf( "child.address=[%p]\n", (void *) p );
printf( "child.pid=[%d] old a=[%d]\n", getpid(), a );
printf( "child.pid=[%d] new a=[%d]\n", getpid(), *p );
}
else
{
*p = 1;
printf( "parent.address=[%p]\n", (void *) p );
printf( "parent.pid=[%d]old a=[%d]\n", getpid(), a );
printf( "parent.pid=[%d]new a=[%d]\n", getpid(), *p );
}
return 0;
}
运行结果如下(ubuntu 9.10 )
address=[0xbfe0770c]
child.address=[0xbfe0770c]
child.pid=[2272] old a=[0]
child.pid=[2272] new a=[0]
parent.address=[0xbfe0770c]
parent.pid=[2271]old a=[1]
parent.pid=[2271]new a=[1]
//10秒后
child.address=[0xbfe0770c]
child.pid=[2272] old a=[0]
child.pid=[2272] new a=[0]
说明: 父进程将a的值变为1。可是子进程为什么没有得到这个值。(地址都一样,为什么地址里的值不一样呢?
ps:不想使用共享内存的。 |
|