basic coder ? linux下獲取當前程序的絕對路徑
linux下獲取當前程序的絕對路徑
在linux下運行的程序經常需要獲取自己的絕對路徑,程序可能需要引用外部的資源文件,比如在../skin/目錄下的圖片,這樣普通程序是沒有問題,但當程序在安裝到/usr/bin/目錄中,或者為程序建立連接以后就會出現問題,我們可以直接通過運行程序的鏈接來運行程序,這樣../skin/目錄就找不到了,因為當前目錄并不是程序所在的目錄,而且鏈接所在的目錄,所以在它的上一級目錄中根本找不到skin目錄,所以就需要獲取程序的絕對路徑,用到了一個函數readlink,原型如下:
1 2 3 #include <unistd.h> ? ssize_t readlink ( const char * restrict path , char * restrict buf , size_t bufsize ) ;該函數的作用是讀取符號鏈接的原路徑,將它存到buf中,返回添充到buf中的字節數。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <unistd.h> #include <stdio.h> ? int main ( int argc , char * argv [ ] ) { char buf [ 1024 ] = { 0 } ; int n ; ? n = readlink ( "/bin/mail" , buf , sizeof ( buf ) ) ; if ( n > 0 && n < sizeof ( buf ) ) { printf ( "%s \n " , buf ) ; } }程序運行后輸出:/usr/bin/mailx
linux系統中有個符號鏈接:/proc/self/exe 它代表當前程序,所以可以用readlink讀取它的源路徑就可以獲取當前程序的絕對路徑,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <unistd.h> #include <stdio.h> ? int main ( int argc , char * argv [ ] ) { char buf [ 1024 ] = { 0 } ; int n ; ? n = readlink ( "/proc/self/exe" , buf , sizeof ( buf ) ) ; if ( n > 0 && n < sizeof ( buf ) ) { printf ( "%s \n " , buf ) ; } }
1 2 ouclwp @ darkstar:~ / socket$ . / read / home / ouclwp / socket / read
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
