c/c++语言开发共享解释这段代码的工作原理; 子进程如何返回值以及在哪里?

我不知道子进程返回的值是怎么回事?

输出为6,7; 问题来源: http : //www.cs.utexas.edu/~mwalfish/classes/s11-cs372h/hw/sol1.html

Program 1: main() { val = 5; if(fork()) wait(&val); val++; printf("%dn", val); return val; } 

    主要流程:

     val = 5; wait(&val); // wait until child finishes 

    儿童过程:

     val++; // val becomes 6 printf("%dn", val); // prints 6 return val; // return val back to main process 

    主要流程:

     wait(&val); // val becomes 6 val++; // val becomes 7 printf("%dn", val); // prints 7 return val; 

     if(fork()) 

    创建子进程。 每个进程都获得var的副本。 fork在父进程中返回非零值。 所以if只为父进程执行。 和wait仅被调用父进程。 它等待子进程完成执行。

    子进程增量val打印并返回。 一旦它返回父进程恢复并通过递增var进一步执行,打印其值,然后从main()返回它。

    fork()基本上创建了一个新进程。 这意味着将复制所有当前值。 这也得出结论,父进程中的val不是子进程中的val 。 这就是你必须以某种方式与子进程进行通信的原因,你可以通过使用wait

     父进程| 儿童过程  --------------------------- | ---------------------- -----  main()|  {|  #########################      int val = 5;  |  // int val = parent.val;  ** int tmp = fork();  |  ** int tmp = 0;      if(tmp)// true |  if(tmp)// false         等待(VAL);  |  //不使用等待          //等到|  VAL ++;  // val = 6          //子进程|  printf(“%d  n”,val);           //返回。  | 返回;  //返回6          //保存返回|  ########### | ############          // val中的值<--------------- + val ++;> 

    每当进程在Linux中退出时,返回值都是临时存储的。 只要父进程没有获得此存储值,子进程仍然会列为zombie。 可以通过wait获取该值。 因此,无论何时在应用程序结束时使用return ,调用者中的wait()都会为您提供此返回值。

    以上输出是错误的。

    主要流程:


     val = 5; wait(&val); // wait until child finishes 

    儿童过程:

     val++; // val becomes 6 printf("%dn", val); // prints 6 return val; // return val*256 back to main process 

    主要流程:

     wait(&val); // val becomes 6 val++; // val becomes 1792+1=1793 printf("%dn", val); // prints 1793 return val; 

    如果在代码中添加一行,上面的输出是正确的!

     Program 1: main() { val = 5; if(fork()) wait(&val); 

    val = val / 256 //如果你添加这一行,那么上面的输出是正确的

      val++; printf("%dn", val); return val; } 

    这是由于

     #define WEXITSTATUS(status) (((status)>>8) & 0xFF) 

      以上就是c/c++开发分享解释这段代码的工作原理; 子进程如何返回值以及在哪里?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562364.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐