我正在使用execv()
从/ bin /运行命令,例如来自我的c ++程序的'ls','pwd','echo',我想知道我应该在argv [0]中提供什么值;
const char * path = getPath();
char ** argv = getArgs();
execv(path,argv);
答案 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 {} \;
哎哟!