给定可执行文件,显示其完整路径

时间:2012-04-20 11:18:48

标签: c linux

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

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

任何人都可以提供代码吗? Atlest与之相关的系统调用。

3 个答案:

答案 0 :(得分:2)

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

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

这是一个项目findcom我很久以前为Windows操作系统编写了一个搜索命令的.net 2.0。您可以从源头获得一些想法。

答案 1 :(得分:1)

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

$ which bash
/bin/bash

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

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

如果在路径的不同部分中具有相同名称的可执行文件(如Solaris系统上的sysV shutdown(/ usr / sbin / shutdown)和berkeley shutdown(/ 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

答案 2 :(得分:0)

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

$ echo $PATH
/usr/bin:/usr/sbin:/bin

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