EXECL [重复]的返回值(Return value of execl [duplicate])

2019-10-21 11:38发布

这个问题已经在这里有一个答案:

  • 检查shell命令的返回值在C 2个回答

我跑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");

Answer 1:

如果exec成功,它永远不会返回。 随后的手段能够找到并启动命令。 如果没有成功,则返回-1。

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

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

  • WIFEXITED(status)会告诉你,如果通过调用停止命令exit
  • 然后你就可以得到与退出状态WEXITSTATUS(status)

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



文章来源: Return value of execl [duplicate]
标签: c linux gcc exec