1. 程式人生 > >Linux下which指令的另類用法

Linux下which指令的另類用法

            最近在實現一個linux下程式的時候,需要程式可以呼叫linux系統下面指定的應用程式。如果這是windows程式,那麼可以通過RegOpenKeyRegOpenKey讀取登錄檔找到指定程式的安裝路徑,再利用CreateProcess函式進行呼叫即可完成前面提到的功能。

       因為每個人安裝程式的習慣不一樣,同一個程式在不同作業系統下的執行路徑可能不一樣,linux下沒有登錄檔這一說,也就無法利用登錄檔來找到程式的執行路徑。由此想到利用強大的shell命令來完成這一功能。首先介紹一下which指令,which指令用於查詢可執行檔案的位置,具體說明如下:         

              1.命令格式:

                    which  可執行檔名稱 

              2.命令功能:

                   which指令會在PATH變數指定的路徑中,搜尋某個系統命令的位置,並且返回第一個搜尋結果。

              3.命令引數:

                  -n  指定檔名長度,指定的長度必須大於或等於所有檔案中最長的檔名。

                  -p  與-n引數相同,但此處的包括了檔案的路徑。

                 -w  指定輸出時欄位的寬度。

                 -V  顯示版本資訊

      寫一個簡單的shell指令碼即可得到程式的執行路徑,在本例用VBoxManage做示例。程式碼如下:

which VBoxManage

     儲存為shell.sh

      程式呼叫shell.sh並且儲存程式執行路徑的程式碼如下所示:

FILE *fp;
char buffer[100];
fp = popen("./shell.sh","r");
fgets(buffer,sizeof(buffer),fp);
pclose(fp);

        上述程式碼片段即可把指令碼執行得到的字串保持到buffer陣列中。