我想写一个执行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
试过了,而且成功了。有什么想法吗?
最佳答案
如果parmList[0]
只包含ls
,execve()
将找不到ls
命令,除非它在当前目录中。
对于execve()
,环境中路径的值是非实质性的-execve()
不使用它。您可以使用execvp()
(或execvpe()
(如果可用)在当前进程的路径上执行该命令。