c语言 - 使用子进程中的"return"从子进程获取返回代码的单线程方法



如果这看起来重复,我深表歉意,但我找不到我正在寻找的答案。我正在尝试做的是在我的 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 errorn");
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 %dn",rcode); //only parent prints this
return rcode;
}

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

我是否应该用 exit(777) 替换返回 777,或者是否有更好的代码可用于从子项设置的子项获取返回值?

退出代码为 8 位。

将 777 截断为 8 位得到值 9。

最新更新