execl的返回值

时间:2014-12-28 13:34:00

标签: 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");

1 个答案:

答案 0 :(得分:4)

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

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

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

  • WIFEXITED(status)会告诉您该命令是否通过调用停止 exit
  • 然后您就可以获得退出状态了 WEXITSTATUS(status)

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