使用子代

时间:2018-03-06 03:59:00

标签: c linux fork return-value child-process

如果这似乎重复,我很抱歉,但我找不到我正在寻找的答案。我正在尝试做的是在我的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,或者是否有更好的代码可以用来从孩子设置的子项中获取返回值?

1 个答案:

答案 0 :(得分:2)

退出代码为8位。

截断777到8位给出值9。