我想编写一个执行Linux ls
命令的程序。
我真的只想输入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
尝试了这一点并且有效。
有什么想法吗?
答案 0 :(得分:2)
如果parmList[0]
仅包含ls
,则execve()
将找不到ls
命令,除非它位于当前目录中。
使用execve()
,环境中PATH的值无关紧要 - execve()
不使用它。您可以使用execvp()
(或execvpe()
如果可用)在当前进程的PATH上执行命令。