2012-04-20 105 views
-5

給定一個可執行文件,它的完整路徑sholud顯示在linux中(使用C)。 可執行文件可以位於當前目錄中,也可以位於其他目錄中。給定一個可執行文件,顯示其完整路徑

它應該類似於UNIX中的TYPE命令。例如與type cp,結果應該是/bin/cp

任何一個人可以提供我的代碼嗎? Atlest與之相關的系統調用。

+0

這更像是「*你是否要編碼嗎?*」 – 2012-04-20 11:26:03

+0

沒有系統調用它。 – jpalecek 2012-04-20 11:29:07

+0

如果在兩個不同的目錄中有兩個具有相同名稱(可能具有相同行爲)的可執行文件,該怎麼辦? (我有一堆「a.out」可執行文件通過我的硬盤傳播) – pmg 2012-04-20 11:29:53

回答

2

這很簡單。我不想給你任何代碼,但基本的想法。

  • 迭代$ PATH環境變量中的所有路徑。
  • 爲每個路徑檢查您正在查找的可執行文件是否存在。
    • 如果存在回顯當前路徑。

這裏是一個項目findcom我寫了很久以前的Windows操作系統與.NET 2.0,搜索的命令。你可能會從源頭上得到一些想法。

0

Linux使用$ PATH環境變量來查找可執行程序。您通常不會給出執行程序的完整路徑(即您只執行ls,而不是/ usr/bin/ls)。在$ PATH下的目錄下搜索可執行文件名稱。 $ PATH環境變量看起來像:

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

系統會發現下的可執行文件: - 分隔目錄。你需要做的是將這個字符串分隔「:」,然後將程序名連接到最後;發出統計調用。如果統計數據成功返回,那意味着程序在那裏。如果不去下一個候選人。系統,就像你會這樣做,將執行第一個找到的路徑。

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)),那麼這可能會有所幫助。 which告訴你哪一個默認運行,whereis爲您提供了所有可能性。

如果你沒有得到響應,這意味着它內置一個外殼,而不是可執行文件,

$ which while 
$ whereis while 
while: 

但是,如果存在的話當作內置外殼和一個可執行文件,它會返回路徑到可執行文件,但會運行內置命令,除非指定了可執行文件的路徑。

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