linux下獲取程式當前目錄絕對路徑

查志強發表於2014-06-10

【原文:http://blog.csdn.net/small_qch/article/details/9198833

1、Shell版

  1. #獲取當前指令碼所在絕對路徑   
  2. cur_dir=$(cd "$(dirname "$0")"; pwd)   
#獲取當前指令碼所在絕對路徑 
cur_dir=$(cd "$(dirname "$0")"; pwd) 

 2、C語言版

    方法一:用realpath函式。這種方法用於開機啟動程式獲取自身目錄會出錯。

  1. char current_absolute_path[MAX_SIZE];    
  2. //獲取當前目錄絕對路徑     
  3. if (NULL == realpath("./", current_absolute_path))    
  4. {    
  5.     printf("***Error***\n");    
  6.     exit(-1);   
  7. }    
  8. strcat(current_absolute_path, "/");    
  9. printf("current absolute path:%s\n", current_absolute_path);    
char current_absolute_path[MAX_SIZE];  
//獲取當前目錄絕對路徑  
if (NULL == realpath("./", current_absolute_path))  
{  
    printf("***Error***\n");  
    exit(-1); 
}  
strcat(current_absolute_path, "/");  
printf("current absolute path:%s\n", current_absolute_path);  
方法二:用getcwd函式。這種方法用於開機啟動程式獲取自身目錄會出錯。
  1. char current_absolute_path[MAX_SIZE];     
  2. //獲取當前目錄絕對路徑     
  3. if (NULL == getcwd(current_absolute_path, MAX_SIZE))    
  4. {   
  5.     printf("***Error***\n");    
  6.     exit(-1);   
  7. }   
  8. printf("current absolute path:%s\n", current_absolute_path);     
char current_absolute_path[MAX_SIZE];   
//獲取當前目錄絕對路徑  
if (NULL == getcwd(current_absolute_path, MAX_SIZE))  
{ 
    printf("***Error***\n");  
    exit(-1); 
} 
printf("current absolute path:%s\n", current_absolute_path);   
方法三:用readlink函式。這種方法最可靠,可用於開機啟動程式獲取自身目錄。
  1. char current_absolute_path[MAX_SIZE];    
  2. //獲取當前程式絕對路徑     
  3. int cnt = readlink("/proc/self/exe", current_absolute_path, MAX_SIZE);    
  4. if (cnt < 0 || cnt >= MAX_SIZE)    
  5. {    
  6.     printf("***Error***\n");       
  7.     exit(-1);    
  8. }    
  9. //獲取當前目錄絕對路徑,即去掉程式名    
  10. int i;    
  11. for (i = cnt; i >=0; --i)    
  12. {    
  13.     if (current_absolute_path[i] == '/')    
  14.     {    
  15.         current_absolute_path[i+1] = '\0';    
  16.         break;    
  17.     }    
  18. }    
  19. printf("current absolute path:%s\n", current_absolute_path);  

相關文章