This question already has answers here:
Closed 5 years ago.
Why the address of variable of child process and parent process is same
(2个答案)
   #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);
     }

根据ideone.com,上述程序的输出是->
 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”的相同地址,那么如果我在一个进程中更改了该值,为什么父进程中没有反映出该更改。
此外,为什么子进程正在运行整个程序,否则它应该在fork()之后使用语句运行。

最佳答案

问题注释中的链接回答了内存地址问题。
对于在父应用程序和子应用程序中都要打印的“hiii”行,由于stdout的缓冲,子应用程序正在打印“hiii”行。在fork()时,该行仍然缓存在内存中,没有刷新到STDUT,直到下一个PrtTf或程序退出。所以这孩子真的是从岔路开始行刑了。
尝试将setvbuf(stdout, NULL, _IONBF, 0);添加为程序的第一行(或至少在第一次打印之前),并查看孩子是否仍打印出“hiii”行。

关于c - 在fork()调用期间如何共享用户程序和数据,以及为什么子进程运行未在fork()调用之前完成? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21382139/

10-14 18:14
查看更多