我需要看一个具体的示例,该示例如何在c程序中为execve()指定环境。在我的类里面,我们正在编写一个程序,该程序将同时使用标准LINUX可执行文件和我们自己的可执行文件。因此,环境搜索PATH将必须包含两种类型的可执行文件的 token 。我找不到如何为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的文档
它说:

但在您的程序中,env_args看起来不像 key = value
因此,大概应该通过以下方式定义env_args:

char *env_args[] = {"PATH=/bin", (char*)0};
要不就
char *env_args[] = { (char*)0 };

关于c - 在C中使用execve(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29615540/

10-15 18:04