欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 中文字幕国产一区 | 欧美精品综合一区二区三区 | 久久一本日韩精品中文字幕屁孩 | 成人免费黄网站 | 好大好硬好长好爽a网站 | 香蕉成人国产精品免费看网站 | 奇米影视888狠狠狠777不卡 | 99视频这里有精品 | 加勒比AV一本大道香蕉大在线 | 中文字幕电影在线观看 | 亚洲一区在线观 | 成人福利在线视频 | 国产精品日日摸夜夜添夜夜av | saoav| www国产 | 欧美一区久久久 | 久久精品视频日本 | 国产高清xxxsexvideo | 精品亚洲成a人片在线观看 在线看片h站 | 国产一区在线观看视频 | 欧美日韩亚洲国内综合网俺 | 国产成人免费视频网站视频社区 | 新婚人妻不戴套国产精品 | 成人啪啪97丁香 | 亚洲中出 | 人人爱人人做 | 天堂亚洲网 | 一级毛片一级毛片一级毛片 | 久久久.com| 成年人在线视频网站 | 久久九九99热这里只有精品 | 成人午夜视频免费 | 欧美激情网 | 欧美日韩中文在线 | 欧美性猛交一区二区三区精品 | 欧美一级久久 | 国产日韩第一页 | 久久综合九色综合欧美狠狠 | 国产亚洲欧洲国产综合一区 | 日日摸夜夜添欧美一区 | 欧美精品国产制服第一页 |