是否有可能在启动它的程序中获得C程序的返回值?

时间:2018-02-06 02:33:36

标签: c

我有一个执行另一个C程序的C程序,这是我的功能:

void execute(char *command, char* option) {
  pid_t pid = fork();
  if(pid == 0) {
    char *argv[] = {"some_fixed_options",option,NULL};
    execv(command,argv);
    exit(127);
  }
  else {
    waitpid(pid,0,0);
  }
}
如果出现错误,

execv()将返回-1。现在我的问题是,我可以使用程序中的return语句"命令"?所以我会将函数更改为类似int execute()的函数,并返回从"命令"返回的语句。程序

2 个答案:

答案 0 :(得分:3)

是。您可以使用第二个waitpid参数,状态位置:

int status;
waitpid (pid, &status, 0);

现在WEXITSTATUS(status)包含command执行的状态(即main()返回的值或exit()提出的值)

答案 1 :(得分:2)

是的,您可以从执行的命令中获取退出状态。您需要做的就是为waitpid提供一个非NULL的第二个参数,以便它可以存储退出状态信息,然后解释状态信息。

请注意,main只能有意义地返回一小部分非负整数。实际上,标准C只保证有两个有意义的返回值,但大多数运行时允许256个值:0表示成功执行,1到255表示某种错误。

waitpid manpage概述了该程序。请参阅example,其简化版本为:

w = waitpid(cpid, &wstatus, 0);
if (w == -1) {
  perror("waitpid");
  exit(EXIT_FAILURE);
}

if (WIFEXITED(wstatus)) {
  printf("exited, status=%d\n", WEXITSTATUS(wstatus));
} 
else {
  printf("Did not exit normally\b");
}