Linux下which指令的另類用法
阿新 • • 發佈:2019-01-29
最近在實現一個linux下程式的時候,需要程式可以呼叫linux系統下面指定的應用程式。如果這是windows程式,那麼可以通過RegOpenKey和RegOpenKey讀取登錄檔找到指定程式的安裝路徑,再利用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陣列中。