給定一個可執行文件,它的完整路徑sholud顯示在linux中(使用C)。 可執行文件可以位於當前目錄中,也可以位於其他目錄中。給定一個可執行文件,顯示其完整路徑
它應該類似於UNIX中的TYPE命令。例如與type cp
,結果應該是/bin/cp
。
任何一個人可以提供我的代碼嗎? Atlest與之相關的系統調用。
給定一個可執行文件,它的完整路徑sholud顯示在linux中(使用C)。 可執行文件可以位於當前目錄中,也可以位於其他目錄中。給定一個可執行文件,顯示其完整路徑
它應該類似於UNIX中的TYPE命令。例如與type cp
,結果應該是/bin/cp
。
任何一個人可以提供我的代碼嗎? Atlest與之相關的系統調用。
這很簡單。我不想給你任何代碼,但基本的想法。
這裏是一個項目findcom我寫了很久以前的Windows操作系統與.NET 2.0,搜索的命令。你可能會從源頭上得到一些想法。
Linux使用$ PATH環境變量來查找可執行程序。您通常不會給出執行程序的完整路徑(即您只執行ls,而不是/ usr/bin/ls)。在$ PATH下的目錄下搜索可執行文件名稱。 $ PATH環境變量看起來像:
$ echo $PATH /usr/bin:/usr/sbin:/bin
系統會發現下的可執行文件: - 分隔目錄。你需要做的是將這個字符串分隔「:」,然後將程序名連接到最後;發出統計調用。如果統計數據成功返回,那意味着程序在那裏。如果不去下一個候選人。系統,就像你會這樣做,將執行第一個找到的路徑。
要獲得完整的可執行文件路徑,當你鍵入命令將運行,使用其
$ 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
這更像是「*你是否要編碼嗎?*」 – 2012-04-20 11:26:03
沒有系統調用它。 – jpalecek 2012-04-20 11:29:07
如果在兩個不同的目錄中有兩個具有相同名稱(可能具有相同行爲)的可執行文件,該怎麼辦? (我有一堆「a.out」可執行文件通過我的硬盤傳播) – pmg 2012-04-20 11:29:53