首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中使用execve()

在c++中使用execve()
EN

Stack Overflow用户
提问于 2015-04-14 05:37:13
回答 1查看 22.3K关注 0票数 5

我需要看一个如何在c程序中为execve()指定环境的具体示例。在我的课上,我们正在编写一个程序,它将利用标准的LINUX可执行文件和我们自己的可执行文件。因此,环境搜索路径必须包含这两种类型的可执行文件的标记。我找不到一个好的例子来说明如何为execve()指定环境(第三个参数),因为似乎每篇文章都建议我们使用execvp()或*clp()或*cl()等。

在我的项目中,我们必须使用execve()。

现在,我只是想让execve()为一个基本的"ls“命令工作,这样以后我就可以让它对任何和所有的可执行文件工作。

以下是我的实验代码片段:

代码语言:javascript
复制
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()?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 06:00:19

下面是关于execve()函数http://linux.die.net/man/2/execve的文档

上面写着:

int execve(常量字符*文件名,字符*常量argv[],字符*常量envp[]);

envp是一个字符串数组,通常采用key=value的形式,作为环境传递给新程序。

但在您的程序中,env_args看起来不像key=value

因此,您可能应该通过以下方式定义env_args:

代码语言:javascript
复制
char *env_args[] = {"PATH=/bin", (char*)0};

或者只是

代码语言:javascript
复制
char *env_args[] = { (char*)0 };
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29615540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档