在 C 语言中使用 execve()
Using execve() in c
我需要看一个具体的例子,说明如何在 c 程序中为 execve() 指定环境。在我的 class 中,我们正在编写一个将使用标准 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()?
这里是关于 execve() 函数的文档 http://linux.die.net/man/2/execve
它说:
int execve(const char *filename, char *const argv[], char *const envp[]);
envp is an array of strings, conventionally of the form
key=value, which are passed as environment to the new program.
但是在你的程序中 env_args 看起来不像 key=value
所以您可能应该通过以下方式定义 env_args:
char *env_args[] = {"PATH=/bin", (char*)0};
或者只是
char *env_args[] = { (char*)0 };
我需要看一个具体的例子,说明如何在 c 程序中为 execve() 指定环境。在我的 class 中,我们正在编写一个将使用标准 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()?
这里是关于 execve() 函数的文档 http://linux.die.net/man/2/execve
它说:
int execve(const char *filename, char *const argv[], char *const envp[]);
envp is an array of strings, conventionally of the form key=value, which are passed as environment to the new program.
但是在你的程序中 env_args 看起来不像 key=value
所以您可能应该通过以下方式定义 env_args:
char *env_args[] = {"PATH=/bin", (char*)0};
或者只是
char *env_args[] = { (char*)0 };