欧美三区_成人在线免费观看视频_欧美极品少妇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级粗大硬长爽猛视频免费 潘金莲强完整版 | 久久夜视频 | 天堂中文在线最新版地址 | 午夜激情影院 | 免费午夜理论不卡 | 日本高清www午色夜黄 | 免费福利视频在线观看 | 国产精品久久久久久久久免费相片 | 全免费A敌肛交毛片免费 | 天天色天天色 | 午夜免费 | 久久久久久国产视频 | 久热免费在线视频 | 中文字幕视频在线观看 | 97中文 | 亚洲韩国精品 | 欧美 video| 亚洲偷图色综合色就色 | 91视频进入| 97超级碰碰碰碰在线视频 | 日韩国产第一页 | 国产精品一二区 | 欧美簧片在线 | 人人天天夜夜 | 草草视频手机在线观看视频 | 欧美三级网址 | 91精品天美精东蜜桃传媒免费 | 国精品午夜dy8888狼人 | 新婚人妻不戴套国产精品 | 成人国产在线观看 | 精品国产一区二区三区性色av | 日本高清在线观看视频 | 午夜理伦三级理论三级在线观看 | 99热官网 | 色精品一区二区三区 | 亚洲欧美日本在线 | 亚洲一区黄色 | av色在线 | 99久久免费费视频在线观看 | 日本高清18xxxx|