3

我正在使用execv()从 /bin/ 运行命令,例如我的 c++ 程序中的“ls”、“pwd”、“echo”,我想知道我应该在 argv[0] 中提供什么值;

const char * path = getPath();
char ** argv = getArgs();

execv(path,argv);
4

3 回答 3

12

argv[0]应该是程序名称。它被传递给程序的main函数。一些程序根据字符串argv[0]是什么来区分它们的行为。例如,bash如果使用sh而不是bash. 最好给它你传递给它的相同值path

在 linux 中,argv[0]top实用程序显示的进程名称(它可能从读取条目中获得/proc/

于 2010-03-02T15:54:47.307 回答
5

argv[0] 应该是您要运行的命令的完整路径。

于 2010-03-02T15:49:05.650 回答
2

我知道这不是您要寻找的答案,但是您这样做是否有特定原因?我问的原因是,大多数(如果不是全部)人们通常运行的操作system()execv()在 Windows 或 Unix 上的库中都可用,并且更安全、更快且不太可能出现环境错误。我的意思是,例如,当PATH发生更改并且您的代码突然停止工作时。

如果您要传递一个字符串,无论是全部还是部分并运行它,那么您也会让自己对通过输入可能具有破坏性的命令访问系统的用户开放。例如,假设您已经实现了文件搜索,find /home -name并且您的用户输入:

"%" -exec rm {} \;

哎哟!

于 2010-03-02T16:05:55.647 回答