【问题标题】:Given an executable file, display its complete path [closed]给定一个可执行文件,显示其完整路径 [关闭]
【发布时间】:2012-04-20 11:18:47
【问题描述】:

给定一个可执行文件,它的完整路径应该在 linux 中显示(使用 C)。 可执行文件可以在当前目录下,也可以在其他目录下。

应该类似于unix中的TYPE命令。例如使用type cp,结果应该是/bin/cp

谁能给我代码? 至少有一个与之相关的系统调用。

【问题讨论】:

  • 更像是“Do you haz teh codez?
  • 没有系统调用。
  • 如果您在两个不同的目录中有两个同名(并且可能具有相同行为)的可执行文件怎么办? (我的硬盘上有一堆“a.out”可执行文件)
  • 问题是关于我们在终端上使用的标准可执行文件。像 cp、ls 等。不是本地可执行文件。

标签: c linux


【解决方案1】:

这很简单。除了基本的想法,我不想给你任何代码。

  • 迭代 $PATH 环境变量中的所有路径。
  • 为每个路径检查您正在寻找的可执行文件是否存在。
    • 如果存在则回显当前路径。

这是我很久以前写的一个项目findcom,用于搜索命令的.net 2.0 的Windows 操作系统。您可能会从源代码中获得一些想法。

【讨论】:

    【解决方案2】:

    要获取在您键入命令时将运行的可执行文件的完整路径,请使用 which

    $ which bash
    /bin/bash
    

    要搜索所有路径(包括 MANPATH),请使用 whereis

    $ whereis bash
    bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
    

    如果您在路径的不同部分有同名的可执行文件,例如 Solaris 系统上的 sysV 关闭 (/usr/sbin/shutdown) 和 berkeley 关闭 (/usr/ucb/shutdown),那么 whereis 会很有帮助。 which 告诉您默认运行哪一个,whereis 为您提供所有可能性。

    如果你没有得到回复,那意味着它是一个内置的shell而不是一个可执行文件,

    $ which while
    $ whereis while
    while:
    

    但是,如果它作为 shell 内置和可执行文件存在,它将返回可执行文件的路径,但除非指定可执行文件的路径,否则将运行内置文件。

    $ which test
    /usr/bin/test
    $ whereis test
    test: /usr/bin/test /usr/share/man/man1/test.1.gz
    

    【讨论】:

      【解决方案3】:

      Linux 使用 $PATH 环境变量来查找可执行程序。您通常不会给出执行程序的完整路径(即您只执行 ls,而不是 /usr/bin/ls)。在 $PATH 下的目录下搜索可执行文件名称。 $PATH 环境变量类似于:

      $ 回声 $PATH /usr/bin:/usr/sbin:/bin

      系统会在 :-separated 目录下找到可执行文件。您要做的就是将此字符串与“:”分开,然后将程序名称连接到末尾;发出统计调用。如果 stat 成功返回,则意味着程序在那里。如果不去下一个候选人。系统,就像你会做的那样,将执行第一个找到的路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多