【问题标题】:How to get Linux command location in C?如何在 C 中获取 Linux 命令位置?
【发布时间】:2017-02-24 21:07:03
【问题描述】:

我在C中使用execv,但它需要获取命令的路径才能执行,例如:

  • 要执行ls我必须有char* command = "/bin/ls";
  • 要执行 gedit 我必须有 char* command = "/usr/bin/gedit";

我的问题是如何在 C 中获取字符串 "/bin""/usr/bin"

【问题讨论】:

  • 改用execvp()?它在 PATH 中的目录中搜索以尝试查找命令。或者你可以模拟它,但这更难。
  • 它正在工作,但我想知道一种获取命令位置的方法。谢谢:)
  • 遍历PATH 环境变量中的每个路径,并在每个文件夹中搜索所需文件。
  • 依次遍历 PATH 中列出的每个目录,查看文件是否存在并且用户是否可执行。这是可行的,但处理诸如 ACL 之类的复杂性以获得权限是很棘手的——这是您不应该在第一次通过时烦恼的事情,但您可能需要稍后再进行处理。或者也许你不会;我还没有这样做,尽管那一天可能会到来。
  • 顺便说一句,没有标准库函数来执行此操作的事实表明,在实践中并不经常需要它——或者每个人都编写了自己的变体,并且没有一个单一的接口占主导地位.

标签: c linux command-line command


【解决方案1】:

您可以从环境中获取 PATH 变量。然后解析它以获取每个组件,然后检查每个组件的位置是否存在给定的命令(文件)。

这基本上就是which 命令的作用。 linux实用程序的源代码可以在网上找到

【讨论】:

    【解决方案2】:

    which command 给出了一个命令的完整路径。例如,

    $ which ls
    /bin/ls
    

    所以,你可以在 C 程序中做这样的事情,

    system ("which ls >x");
    // read file x for complete path of ls
    

    【讨论】:

    • 注意:x 将是当前目录中的一个文件,代码需要打开、读取、关闭该文件才能获得which 命令的实际结果
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2013-03-23
    • 2013-09-26
    相关资源
    最近更新 更多