Linux C——獲取當前目錄的方法
阿新 • • 發佈:2019-01-24
兩種方法:
1. 利用getcwd()函式取得當前工作目錄(相當於windows下的GetCurrentDirectory)
2. 取得實際檔案目錄(相當於windows下的GetModuleFileName())
原理:每個程序在/proc下都有一個以程序號命名的目錄。在該目錄下有exe檔案,該檔案是一個連結檔案,它指向的路徑就是該程序的全路徑.
用readlink()讀exe檔案返回該程序的全路徑
如果不在意可能導致的安全隱患,可以使用procfs,然後readlink,把當前程序的pid對應的目錄下面的file指向的位置讀出來(注意需要先掛載procfs)
pit_t mypid = getpid();
sprintf(strsrc, "/proc/%d/file", mypid);
readlink(strsrc, strdest, LEN);//LEN最好是你的_POSIX_PATH_MAX
所以,如果支援/proc檔案系統,下面的程式碼可以解決你的問題:
- #include <stdlib.h>
- #include <unistd.h>
- #include <stdio.h>
- #ifndef PATH_MAX
- #define PATH_MAX 1024
- #endif
- char * get_exe_name()
- {
- staticchar buf[PATH_MAX];
- int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
-
if ( rslt < 0 || rslt >= PATH_MAX )
- {
- return NULL;
- }
- buf[rslt]=0;
- return buf;
- }
- int main( void)
- {
- char * exe_name = get_exe_name();
- printf("%s\n", exe_name );
- return 0;
- }