我需要看到如何在ac程序中指定execve()的环境的具体示例。 在我的课上,我们正在编写一个程序,它将使用标准的LINUX可执行文件和我们自己的可执行文件。 因此,环境searchpath将不得不包含这两种types的可执行文件的标记。 我找不到一个很好的例子来说明如何为execve()指定环境(第三个参数),因为每篇文章似乎都build议我们使用execvp()或* clp()或* cl()等。
在我的项目中,我们必须使用execve()。
现在,我只是试图让execve()为一个基本的“ls”命令工作,以便我可以稍后为任何和所有的可执行文件工作。
这是我的实验代码片段:
else if(strcmp(tokens[0], "1") == 0) { char *args[] = {"ls", "-l", "-a", (char *)0}; char *env_args[] = {"/bin", (char*)0}; execve(args[0], args, env_args); printf("ERROR\n"); }
每次在我的shell中input命令“1”时,都会看到我的错误消息。 我怀疑这是因为我声明env_args []的方式。
有人可以给我一个很好的例子,说明如何使用指定的命令search环境来实现execve()吗?
这里是关于execve()函数的文档http://linux.die.net/man/2/execve
它说:
int execve(const char * filename,char * const argv [],char * const envp []);
envp是一个字符串数组,通常是key = value形式,作为环境传递给新程序。
但在你的程序中,env_args看起来不像key = value
所以可能你应该通过以下方式定义env_args:
char *env_args[] = {"PATH=/bin", (char*)0};
要不就
char *env_args[] = { (char*)0 };