在Linux開發應用時,我們常常需要在程序中獲取當前程序絕對路徑,我們可以通過readlink讀取符號鏈接/proc/self/exe進行獲取,這個符號鏈接代表當前程序,它的源路徑就是當前程序的絕對路徑,比如我們在終端下鍵入命令:
[yangye@localhost ~]$ ls -ld /proc/self/exe lrwxrwxrwx 1 yangye yangye 0 2月 18 16:05 /proc/self/exe -> /usr/bin/ls
可以看到/proc/self/exe指向ls命令的絕對路徑。
ok,清楚原理后接下就是完整代碼:
#include <string> #include <limits.h> #include <sys/types.h> string getExePath() { char result[PATH_MAX]; ssize_t count = readlink( "/proc/self/exe", result, PATH_MAX ); string exePath = string( result, (count > 0) ? count : 0 ); size_t pos = exePath.find_last_of("\\/"); return (string::npos == pos) ? "" : exePath.substr(0, pos); }
上面代碼中最終返回的是程序所在目錄,如果需要程序絕對路徑時直接返回exePath即可不用再做字符串分割。