0

我想编写一个执行 Linuxls命令的程序。我真的只想输入ls而不是/bin/ls,所以我想使用execve(execvp不是一个选项) 来做到这一点。

我试过:

char *env[] = { "SHELL=/bin/bash",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games",
"_=/usr/bin/env",
(char *)0 };
execve(parmList[0], parmList, env);

但它似乎不起作用,ls不被认可,但/bin/ls它是。没有什么问题,parmList因为我试过这个execvp并且它有效。

有任何想法吗?

4

1 回答 1

2

如果parmList[0]包含 just lsexecve()则不会找到该ls命令,除非它位于当前目录中。

有了execve(),环境中 PATH 的值是无关紧要的——execve()不使用它。您将使用execvp()(或execvpe()如果可用)在当前进程的 PATH 上执行命令。

于 2015-11-08T20:53:54.267 回答