首页 文章

在c中使用execve()

提问于
浏览
4

我需要看一个如何在c程序中为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()的一个很好的例子吗?

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 };
    

相关问题