日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

basic coder ? linux下獲取當前程序的絕對路徑

系統 2109 0

basic coder ? linux下獲取當前程序的絕對路徑

linux下獲取當前程序的絕對路徑

2010年2月25日
發表評論
閱讀評論
5,072 人閱讀過??

?

在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
                  
                

basic coder ? linux下獲取當前程序的絕對路徑


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 荔浦县| 通州区| 临夏县| 雅安市| 柘城县| 万山特区| 常德市| 昭通市| 自治县| 平昌县| 花垣县| 长春市| 承德县| 石景山区| 连平县| 江源县| 夏津县| 敖汉旗| 确山县| 安康市| 铜鼓县| 绿春县| 乌拉特前旗| 松阳县| 堆龙德庆县| 永嘉县| 双峰县| 平和县| 贵定县| 营山县| 北流市| 台中县| 包头市| 密云县| 天柱县| 武义县| 孟村| 班戈县| 福清市| 彩票| 南涧|