execl的返回值

mar*_*olo 2 c linux gcc exec

我正在运行 execl 函数来通过我的代码编译程序。我想检查一下编译是否正确。所以我写了b = execl("usr/bin/gcc","cc",path,NULL);然后检查了if( b==-1)。但即使编译中有错误,它也没有进入 if 语句。有什么想法吗?谢谢你!

int b=0;
if ((pid1 = fork())<0)
    perror("Error forking");
else {
    if(pid1==0)
        b= execl("/usr/bin/gcc","cc",path,NULL);
    else wait(&status);
}
if(b==-1)
    printf("\n--------\n");
Run Code Online (Sandbox Code Playgroud)

Jea*_*nès 5

如果exec成功,它将永远不会返回。成功意味着能够找到并启动该命令。如果不成功它将返回-1。

您需要的是从父进程status中使用的命令中提取命令的退出值。wait

您有一些宏来确定子进程的运行状态。

  • WIFEXITED(status)会告诉你命令是否因调用而停止 exit
  • 然后您将能够通过 获得退出状态 WEXITSTATUS(status)

如果该值status等于 0,那么您将知道该命令已成功运行,任何其他值都意味着该命令无法正常执行其任务。