1. 程式人生 > >Linux C——獲取當前目錄的方法

Linux C——獲取當前目錄的方法

兩種方法:

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檔案系統,下面的程式碼可以解決你的問題: 

  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #ifndef PATH_MAX
  5. #define PATH_MAX 1024
  6. #endif
  7. char * get_exe_name()   
  8. {  
  9.     staticchar buf[PATH_MAX];  
  10.     int rslt = readlink("/proc/self/exe", buf, PATH_MAX);  
  11.     if ( rslt < 0 || rslt >= PATH_MAX )   
  12.     {  
  13.         return NULL;  
  14.     }  
  15.     buf[rslt]=0;  
  16.     return buf;  
  17. }  
  18. int main( void)  
  19. {  
  20.     char * exe_name = get_exe_name();  
  21.     printf("%s\n", exe_name );  
  22.     return 0;  
  23. }