使用子进程中的“return”从子进程获取返回代码的单线程方式

问题描述 投票:1回答:1

如果这看起来重复,我很抱歉,但我找不到我正在寻找的答案。我想要做的是在我的C程序中创建一个超级简单的函数,它调用我也用C制作的应用程序,等待它完成,然后从应用程序接收返回值。

这是我的应用程序的源代码:

int main(){
    return 777;
}

我编译它并将其重命名为b.out并将其放在根文件夹中,以便程序可以执行它。如您所见,所有应用程序都返回777到系统。

这是调用应用程序的程序:

  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
  #include <wait.h>
  #include <unistd.h>

  int rcode=0;

  int run(char* dir,char* mainapp,char *par1,char *par2){
  int f=fork();
  if (f==-1){
      printf("Fork call error\n");
      return -1;
  }
  if (f==0){ //child
      char cmdline[1000];
      memset(cmdline,0,1000); //command line = directory + / + appname
      strcat(cmdline,dir);
      strcat(cmdline,"/");
      strcat(cmdline,mainapp);
      //par1,par2 = parameters to program
      char *args[5]={cmdline,par1,par2,NULL};
      execve(cmdline,args,NULL);
      return 1; //this is child here
    }else{
      int waitstat;
      waitpid(f,&waitstat,0); //let child finish
      rcode=WEXITSTATUS(waitstat); //get return code from child
    }
  return 0;
  }

  int main(){
  if (run("/","b.out","","")==1){
      return 0; //exit if this is child
  };
  printf("Child returns %d\n",rcode); //only parent prints this
  return rcode;
  }

当我执行所有内容时,报告的返回值为9(rcode = 9),但它应该等于777,因为我的程序使其等于。

我应该用exit(777)替换return 777还是有更好的代码可以用来从孩子设置的孩子那里获得返回值?

c linux fork return-value child-process
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.