#include<stdio.h>
main()
{
int a=9;
printf(" %u hiii \n",&a);
int p=fork();
if(p==0){
a=10;
printf("\nChild %u \n Value in child of a = %d\n",&p,a);
}
else
printf("\nvalue of a = %d \n Parent with child process id = %d address of p = %u \n",a,p,&p);
}
以上程序的Ouptut根据ideone.com是 - &gt;
3215698376 hiii
value of a = 9
Parent with child process id = 28150 address of p = 3215698380
3215698376 hiii
Child 3215698380
Value in child of a = 10
我的问题是,如果两个进程都给出变量'a'的相同地址,那么如果我在一个进程中更改值,为什么不是在Parent进程中反映的更改。 此外,为什么子进程运行整个程序,它应该在fork()之后运行语句。
答案 0 :(得分:2)
问题评论中的链接回答了内存地址问题。
对于在父应用程序和子应用程序中打印出的“hiii”行,由于stdout的缓冲,子节点打印出“hiii”行。在fork()
时,该行仍在内存中缓冲,并且在下一个printf或程序退出之前不会刷新到stdout。所以孩子真的开始在叉线执行。
尝试添加setvbuf(stdout, NULL, _IONBF, 0);
作为程序的第一行(或至少在第一个printf之前),看看孩子是否仍打印出“hiii”行。