欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2010 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條評論
主站蜘蛛池模板: 欧美手机在线 | 97理论三级九七午夜在线观看 | 午夜在线免费观看 | 日韩在线观看网站 | 一级毛片欧美 | 日韩三级一区 | a级毛片免费高清视频 | 九九热在线免费视频 | 三级精品 | 看毛片网站 | 日韩欧美在线观看视频 | 在线成人av | 青娱乐欧美视频 | 成人小视频在线观看免费 | 91视频网国产 | 国产成人精品区一区二区不卡 | 玖草网 | 日韩精品亚洲人成在线播放 | 正规成人啪啪 | 日韩精品欧美一区二区三区 | 日本妇人成熟免费不卡片 | 91精品国产综合久久婷婷香蕉 | 亚洲欧美另类视频 | 亚洲精品99 | 产真a观专区 | 欧美一区二区三区四区五区 | 啪啪网免费 | 大陆黄色a级片 | 无码日本亚洲一区久久精品 | 九一精品| 国产毛片片精品天天看视频 | 成人国产一区二区 | 欧美在线日韩 | 久草免费在线观看 | 国产精品毛片一区二区三区 | av黄色在线免费观看 | 久久福利 | 韩国三级bd高清中字木鱼天 | 国产精品国产三级国产专区5o | 一区二区日韩 | 亚洲日本中文字幕 |