代码之家  ›  专栏  ›  技术社区  ›  Tom Neyland

从C++执行命令,在ARGV(0)中预期什么?

  •  3
  • Tom Neyland  · 技术社区  · 15 年前

    我正在使用 execv() 从我的C++程序中运行来自/bin的命令,例如“ls”、“pWd”、“回音”,我想知道在ARVV(0)中我应该提供什么值;

    const char * path = getPath();
    char ** argv = getArgs();
    
    execv(path,argv);
    
    3 回复  |  直到 15 年前
        1
  •  12
  •   Johannes Schaub - litb    15 年前

    argv[0] 应该是程序名。它被传递到程序的 main 功能。有些程序根据字符串区分其行为 AGV〔0〕 是。例如GNU bash 如果使用 sh 而不是 猛击 . 最好给它和你传递给它的值相同 path .

    在Linux中, AGV〔0〕 进程名称是否由 top 实用程序(它可能从读取 /proc/ )

        2
  •  5
  •   Baget    15 年前

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

        3
  •  2
  •   Component 10    15 年前

    我知道这不是你要找的答案,但你为什么要这样做有具体的原因吗?我问的原因是,大多数人通常都会采取的行动 system() execv() 在Windows或Unix上的库中都可用,并且更安全、更快、更不容易受到 间接的 错误。我的意思是,例如,当 PATH 更改,代码突然停止工作。

    如果您正在传入一个字符串(全部或部分),并运行它,那么您还可以让用户通过输入可能会造成破坏的命令来访问系统。例如,假设您使用 find /home -name 您的用户输入:

    "%" -exec rm {} \;
    

    哎哟!