如果这似乎重复,我很抱歉,但我找不到我正在寻找的答案。我正在尝试做的是在我的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,或者是否有更好的代码可以用来从孩子设置的子项中获取返回值?
答案 0 :(得分:2)
退出代码为8位。
截断777到8位给出值9。