【发布时间】:2014-12-28 13:34:00
【问题描述】:
我正在运行 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");
【问题讨论】:
-
如果
exec系列中的任何函数成功,它们不会返回。他们只在失败的情况下返回。 -
如果你在编译中遇到错误,那么就不会生成任何新的可执行文件,所以你的问题有矛盾:“我的程序不能像我预期的那样工作,它没有编译”。代码不会像预期的那样工作因为你有一个编译器错误,实际上代码根本不会运行,因为你没有程序可以运行。
-
但这就是问题所在——我故意写了一些东西来在编译过程中出错,但没有进入 if 语句
-
要么存在编译器错误,您需要修复它,要么获得可以运行的程序。你不能两者兼得。
-
啊——Joachim,编译错误发生在在被调用的程序中。我认为它仍然没有返回,因为 call 本身 没有失败——编译器确实运行并做了它的事情,所以那里没有错误。你需要另一个函数来调用它;可能是
system。