【问题标题】:C - exec to execute command with arguments? [duplicate]C - exec 执行带参数的命令? [复制]
【发布时间】:2018-10-16 23:30:33
【问题描述】:

我正在尝试运行一个简单的 C 程序,该程序执行带有一些参数的命令:

ls -l -a -i

我搜索了有关 exec 家族的信息,但不了解所有不同的 exec 调用以及使用哪个调用。

我的程序是:

int main(int argc, char **argv)
{
    const char *cmd = "ls";
    const char *args[3];
    args[0] = "-l";
    args[1] = "-a";
    args[2] = "-i";

    execv(cmd, args); /* this line does not work */

    return 0;
}

我认为execv 的调用方式为:

  • char *cmd 作为命令
  • char *args[] 作为参数

但是我在所有不同的组合和尝试中都遇到了错误。

【问题讨论】:

  • 来自man execv():“参数列表必须以 NULL 指针终止,”(正如 @mch 所说,但这可能“仅”导致编译器警告......无论如何都要认真对待)
  • 也回想一下你自己是如何处理参数的,argv[0] 是什么?您传递的 args 数组就是该程序中的 argv 数组。
  • 阅读手册页cmdexecv 是要执行的程序的路径。如果要在$PATH 中执行程序,请使用execvp。并且不要忘记 exec 替换您正在运行的程序。
  • char *args[] = { "ls", "-l", "-a", "-i", 0 }; execv("/bin/ls", args);

标签: c command exec


【解决方案1】:

这是一段有效的代码,您应该将其用作成功完成任务的参考:

char* arr[] = {"ls", "-l", "-a", "-i", NULL};

execv("/bin/ls", arr);

【讨论】:

  • 请注意格式代码。最简单的方法是标记所有代码并点击ctrl + k - 为您修复它;)
猜你喜欢
  • 2019-10-09
  • 2014-07-20
  • 1970-01-01
  • 2015-11-20
  • 2018-10-17
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多