在linux下執行的程式經常需要獲取自己的絕對路徑,程式可能需要引用外部的資源檔案,比如在../skin/目錄下的,這樣普通程式是沒有問題,但當程式在安裝到/usr/bin/目錄中,或者為程式建立連線以後就會出現問題,我們可以直接通過執行程式的鏈結來執行程式,這樣../skin/目錄就找不到了,因為當前目錄並不是程式所在的目錄,而且鏈結所在的目錄,所以在它的上一級目錄中根本找不到skin目錄,所以就需要獲取程式的絕對路徑,用到了乙個函式readlink,原型如下:
#include ssize_t readlink(const char *restrict path , char *restrict buf , size_t bufsize)
該函式的作用是讀取符號鏈結的原路徑,將它存到buf中,返回添充到buf中的位元組數。
#include #include int main(int argc , char* argv)
; int n;
n = readlink("/bin/mail" , buf , sizeof(buf));
if( n > 0 && n < sizeof(buf))
}
#include #include int main(int argc , char* argv)
; int n;
n = readlink("/proc/self/exe" , buf , sizeof(buf));
if( n > 0 && n < sizeof(buf))
}
經過測試,這個辦法得到的路徑完整準確,即使製作乙個軟連線,然後放在別的目錄下執行,也能得到正確的路徑
而改用如下**,則會因為軟鏈結的位置變化而出先不一樣的結果
#include int main()
獲取當前程式路徑
獲取部件所在位置。如果其所在的dll在gac中,那返回的就是gac中的路徑。str this.gettype assembly.location 獲取新的process元件並將其與當前活動的程序關聯的主模組的完整路徑,包含檔名 程序名 str system.diagnostics.process.g...
Linux下,c 獲取當前程式路徑
linux下,c 獲取當前程式路徑 include include char buffer buffer getcwd null,0 cout 檔案路徑 buffer endl 將需要呼叫的模組使用 strcat 作拼接 const char model path strcat buffer,mod...
Delphi 獲取當前程式路徑
在delphi sysutils 單元中 edit1.text paramstr 0 自己全路徑c 555 qq.exe,可用於控制台 edit2.text extractfiledir paramstr 0 獲取本程式的路徑 c qq expandfilename 返回檔案的全路徑 含驅動器 路徑...