给定一个可执行文件,它的完整路径应该显示在 linux 中(使用 C)。可执行文件可以在当前目录中,也可以在其他目录中。
它应该类似于 unix 中的 TYPE 命令。例如type cp
,结果应该是/bin/cp
。
谁能给我代码吗?至少有一个与之相关的系统调用。
这很简单。除了基本的想法,我不想给你任何代码。
这是我很久以前为使用 .net 2.0 搜索命令的 Windows 操作系统编写的项目findcom 。你可能会从源头得到一些想法。
要获取在您键入命令时将运行的可执行文件的完整路径,请使用 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
Linux 使用 $PATH 环境变量来查找可执行程序。您通常不会给出执行程序的完整路径(即您只执行 ls,而不是 /usr/bin/ls)。在 $PATH 下的目录下搜索可执行文件名称。$PATH 环境变量类似于:
$ 回声 $PATH /usr/bin:/usr/sbin:/bin
系统会在 :-separated 目录下找到可执行文件。您要做的就是将此字符串与“:”分开,然后将程序名称连接到末尾;发出统计调用。如果 stat 成功返回,则表示程序存在。如果不去下一个候选人。系统,就像你会做的那样,将执行第一个找到的路径。