【问题标题】:Executing ls in a different directory in C using exec使用 exec 在 C 中的不同目录中执行 ls
【发布时间】:2020-07-18 07:46:17
【问题描述】:

标题对于我想要做什么是不言自明的。

我目前的尝试:

  chdir("/Path/I/want/");   //this is different that the path my program is located at
      char * ls_args[] = { "ls" , "ls -l", NULL};
      execv(ls_args[0], ls_args);
    }

我没有收到任何错误或输出,有什么帮助吗?

【问题讨论】:

  • 为什么要更改目录而不是简单地发出ls /Path/you/want/
  • 1) 也可以在给定路径创建文件(例如在fopen() 中指定完整路径。2)为了访问执行命令的输出,请使用popen()(在Linux)或_popen()(在 Windows 上)。我在这个答案stackoverflow.com/a/61010544/11336762 中解释了后者的使用(即使是不同的命令)。
  • 我很清楚这一点,感谢您提及,但我被要求使用 exec 进行此操作,这不是我的选择,但我非常感谢您提及这一点。
  • 在这种情况下它有点复杂,因为exec 函数不提供可以从调用程序中读取的执行程序输出流。这个问题解释了如何做:你必须做一个管道(这就是 popen() 实际做的......):stackoverflow.com/questions/7292642/grabbing-output-from-exec
  • 或者,您可以将输出重定向到一个文件(类似于ls path > . out.txt)并通过fopen()fgets() 等处理它...

标签: c exec ls


【解决方案1】:

Execv 函数需要您必须执行的命令的完整路径。所以,不要给"ls",你应该通过

找出ls在你系统中的位置

$ which ls

它可能在 /bin 文件夹中。 所以你必须把"/bin/ls" 给exec。 ls 的任何参数也应该是数组中的另一个成员。 所以不要使用

char * ls_args[] = { "ls" , "ls -l", NULL};

使用

char * ls_args[] = { "/bin/ls" , "-l", NULL};

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多