5

我需要看一个具体的例子,说明如何在 ac 程序中为 execve() 指定环境。在我的课堂上,我们正在编写一个程序,该程序将使用标准 LINUX 可执行文件和我们自己的可执行文件。因此,搜索 PATH 的环境必须包含两种可执行文件的标记。我找不到一个很好的例子来说明如何为 execve() 指定环境(第三个参数),因为每篇文章似乎都建议我们使用 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 中输入命令“1”时,我都会看到我的错误消息。我怀疑这是因为我声明 env_args[] 的方式。

有人可以向我展示如何使用指定的命令搜索环境实现 execve() 的一个很好的例子吗?

4

1 回答 1

3

这是关于 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 };
于 2015-04-13T22:00:19.040 回答