从C ++执行命令,argv [0]中的预期是什么?

时间:2010-03-02 15:46:50

标签: c++ linux argument-passing execv

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

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

execv(path,argv);

3 个答案:

答案 0 :(得分:12)

argv[0]应该是程序名称。它被传递给程序的main函数。某些程序根据字符串argv[0]区分其行为。例如,如果使用bash而不是sh调用,GNU bash shell将禁用其部分功能。最好给它传递给path的相同值。

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

我知道这不是您正在寻找的答案,但有没有具体原因让您这样做?我问的原因是,人们通常使用system()execv()正常运行的所有操作都可以在Windows或Unix上的库中使用,并且更安全,更快速且不太可能受到影响< em>间接错误。我的意思是,例如,当PATH发生变化时,您的代码突然停止工作。

如果您传入一个字符串,无论是全部还是部分,并运行它,那么您也可以通过输入可能有害的命令让用户获得对系统的访问权。例如。假设您已使用find /home -name实现了文件搜索,并且您的用户输入了:

"%" -exec rm {} \;

哎哟!