-6

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

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

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

4

3 回答 3

2

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

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

这是我很久以前为使用 .net 2.0 搜索命令的 Windows 操作系统编写的项目findcom 。你可能会从源头得到一些想法。

于 2012-04-20T11:23:53.453 回答
1

要获取在您键入命令时将运行的可执行文件的完整路径,请使用 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
于 2012-04-20T15:27:42.040 回答
0

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

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

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

于 2012-04-20T11:32:20.030 回答