执行从C ++的命令时,是什么argv中[0]预期?
-
23-09-2019 - |
题
我使用execv()
运行从/ bin中/命令,如从我的C 'LS', 'PWD', '回响' ++程序,我想知道什么值I应argv中提供[0];
const char * path = getPath();
char ** argv = getArgs();
execv(path,argv);
解决方案
argv[0]
被认为是程序名称。它传递给程序的main
功能。某些程序取决于什么字符串argv[0]
是区分他们的行为。例如,如果使用bash
代替sh
称为GNU bash
外壳将禁用它的一些特性。最好给它传递给path
相同的值。
在Linux中,argv[0]
是进程名显示在由top
实用程序(它有可能从在/proc/
读取条目获取)
其他提示
的argv [0]应该是要运行的命令的完整路径。
我知道,这是不是你要找的答案,但有没有一个具体的理由你为什么这样做?我想问的原因是,大多数如果不是所有的行动,人们通常用两种system()
或execv()
运行在Windows或Unix的库可用,更安全,更快捷,更不可能从的间接的错误受苦。我的意思是,例如,当PATH
变化,突然你的代码停止工作。
如果你传递一个字符串,无论是全部或部分,并运行它,那么你也给自己打开输入可能被损坏的命令获得访问系统的用户。例如。想象一下,你已经实现了使用find /home -name
文件搜索和您的用户类型:
"%" -exec rm {} \;
哎哟!
不隶属于 StackOverflow