我正在编写一个程序,目的是编写另一个程序。 正在使用exec来运行gcc。 我必须使用execve,我拥有的是:
#include <unistd.h> #include <sys/types.h> int main(int argc, char* argv[], char* envp[]) { argv[0] = "gcc"; execve("/usr/bin/gcc" , argv, envp); return 0; }
通过做
gcc -Wall p3p4.c -o run
它编译没有问题,但在做什么
./run p3p1.c
要尝试编译另一个,会发生这种情况:
run: error trying to exec 'cc1': execvp: No such file or directory
编辑:
据build议,添加该行时:
argv[0] = "gcc";
该scheme设法工作。 谢谢你的反馈。
尝试像一个行为良好的程序设置argv[0]
:
argv[0] = "gcc"; execve("/usr/bin/gcc" , argv, envp);
运行:错误尝试执行'cc1':
这显然是gcc尝试在argv[0]
发现意外事件时运行的。
excve
告诉你他没有找到gcc
。 尝试
execvpe ("gcc", argv, envp);
请注意,这里envp
是无用的(而不是POSIX)。 你可以安全地从main()
移除envp
并调用
execvp ("gcc", argv);