下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)Linux如何獲取進(jìn)程的基地信息
1.問(wèn)題
執(zhí)行程序時(shí),與程序同目錄下存在一config/目錄,其中存放了json格式的配置文件。進(jìn)行部署時(shí)需要將程序和config/目錄放在同一位置。那么,問(wèn)題來(lái)了,如何保證不管這個(gè)程序部署到什么位置,不管以什么方式運(yùn)行,程序自己都能訪(fǎng)問(wèn)到配置文件呢?
解決問(wèn)題之前,先說(shuō)一下進(jìn)程的工作目錄——CurrentW(or)kingDirectory。
2.什么是進(jìn)程的工作目錄
進(jìn)程的工作目錄是指進(jìn)程的調(diào)用者在啟動(dòng)進(jìn)程對(duì)應(yīng)的程序時(shí),調(diào)用者所在的目錄。比如說(shuō),在/home/(sd)c/目錄下有一個(gè)可執(zhí)行程序hello-world。如果在根目錄下啟動(dòng)hello-world,那么hello-world進(jìn)程的工作目錄為根目錄/。如果在/home/sdc目錄下啟動(dòng)hello-world,那么其工作目錄為/home/sdc。
(Linux)C中,有兩個(gè)函數(shù)可以獲取進(jìn)程工作目錄:getcwd()和re(ad)link()。
2.1getcwd()man3getcwd():/linux/mans/man2/getcwd.2.html
#includechar*getcwd(char*buf,size_tsize);該函數(shù)將獲取到的進(jìn)程工作目錄的絕對(duì)路徑存儲(chǔ)在形參buf中。同時(shí)也會(huì)返回一個(gè)指針,指針指向的內(nèi)容和buf存儲(chǔ)的內(nèi)容相同。如果路徑的長(zhǎng)度比size大,那么該函數(shù)返回為NULL。
2.2readlink()man2readlink:/linux/mans/man2/readlink.2.html
#includessize_treadlink(constchar*pathname,char*buf,size_tbufsiz);該函數(shù)用于獲取符號(hào)鏈接所指的文件。借助/proc/self/cwd,即pathname="/proc/self/cwd",readlink()即可獲得當(dāng)前進(jìn)程的工作目錄。
該函數(shù)同樣將進(jìn)程工作目錄的絕對(duì)路徑存儲(chǔ)在形參buf中,并返回存儲(chǔ)的路徑長(zhǎng)度。但是,buf中存儲(chǔ)路徑不帶字符串結(jié)束符'?'。而且,如果返回的長(zhǎng)度和bufsiz相同,那么路徑信息很可能被截取了。
2.3簡(jiǎn)單例程hello-world.c:
#include#include#include#includeintmain(intargc,char*argv[]){charwork_dir[64]={0};intdir_size=0;getcwd(work_dir,sizeof(work_dir)))printf("getcwd:%sn",work_dir);(mems)et(work_dir,0,sizeof(work_dir));dir_size=readlink("/proc/self/cwd",work_dir,sizeof(work_dir));work_dir[dir_size]='?';printf("readlink:%sn",work_dir);return0;}執(zhí)行結(jié)果:
3.獲取進(jìn)程對(duì)應(yīng)程序的絕對(duì)路徑
如果想要解決文章開(kāi)頭提出的問(wèn)題,那么進(jìn)程需要獲取程序所在的絕對(duì)路徑。該功能通過(guò)readlink(constchar*pathname,char*buf,size_tbufsiz)實(shí)現(xiàn)。不過(guò)pathname不再是/proc/self/cwd,而是/proc/self/exe。
開(kāi)箱即用代碼:
#include#include#include#include#include#include#defineCONFIG_FILENAME"./config/psl.json"http://getcurrentprocesselfabsolu(te)pathstat(ic)int32_tcurr_elf_abs_path_get(int8_t*path_buf,int32_tbuf_size){ssize_tlen=0;int32_ti=0;len=readlink("/proc/self/exe",path_buf,buf_size);if(-1==len){perror("readlinkn");return-1;}if(len==buf_size){printf("Warn:pathmaybetruncatedn");}//fromlasttohead,findfi(rs)t'/'for(i=len;i>0;i--){if(path_buf[i]=='/'){path_buf[i+1]='?';break;}}return0;}intmain(intargc,char*argv[]){int8_telf_path[128]={0};int8_tconfig_file_path[256]={0};intfd=-1;int32_ti=0;int32_tret=0;ret=curr_elf_abs_path_get(elf_path,sizeof(elf_path));if(0!=ret){printf("getexepathfai(led)n");return-1;}printf("currentprocessexeabsolutepath:%sn",elf_path);sprin(tf)(config_file_path,"%s%s",elf_path,CONFIG_FILENAME);fd=open(config_file_path,O_RDWR);if(-1==fd){perror("open");return-1;}printf("open%ssuccessn",config_file_path);close(fd);return0;}CMakeLists.txt:
cmake_minimum_required(VERSION3.12)project(exe-abs-pathC)set(CMAKE_VERBOSE_MAKEFILEON)add_executable(${PROJECT_NAME}main.c)執(zhí)行結(jié)果:
4.總結(jié)
我當(dāng)然可以借助shell腳本解決該問(wèn)題。可是,我還是喜歡讓程序自己”實(shí)現(xiàn)“該功能,這樣我在部署和使用時(shí)會(huì)方便很多。
5.說(shuō)明
/proc/self/目錄中存放了當(dāng)前進(jìn)程的很多有用信息。
/proc/self/fd/:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023九年級(jí)物理下冊(cè) 專(zhuān)題三 熱學(xué)2 內(nèi)能及其利用教學(xué)實(shí)錄 (新版)新人教版
- 辦公設(shè)備保養(yǎng)/維修協(xié)議
- 臨沂職業(yè)學(xué)院《太陽(yáng)能制冷與空調(diào)技術(shù)課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版發(fā)電機(jī)維修技術(shù)培訓(xùn)及心得體會(huì)交流協(xié)議3篇
- 2024年度股權(quán)轉(zhuǎn)讓合同標(biāo)的為互聯(lián)網(wǎng)公司6篇
- 2024版典當(dāng)行股權(quán)投資與收益分配及風(fēng)險(xiǎn)管理合同5篇
- 簡(jiǎn)約物業(yè)租賃合同
- 2024至2030年中國(guó)交直流瓦特鉤表行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2024年廚房廚柜供貨安裝合同3篇
- 2024年度銅門(mén)銷(xiāo)售渠道拓展合作協(xié)議3篇
- 脊柱四肢及肛門(mén)直腸檢查
- 音樂(lè)與人生-西南交通大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 交通運(yùn)輸布局對(duì)區(qū)域發(fā)展的影響-揚(yáng)州的興衰高一地理人教版(2019)必修第二冊(cè)
- 2023年高考全國(guó)新課標(biāo)Ⅱ卷作文“安靜一下不被打擾”導(dǎo)寫(xiě)及范文
- 實(shí)驗(yàn)指導(dǎo)書(shū)-基于思科模擬器的靜態(tài)NAT的配置
- 多金屬?gòu)U料高效綜合回收利用產(chǎn)業(yè)升級(jí)項(xiàng)目環(huán)評(píng)報(bào)告書(shū)
- 商洛市商州區(qū)金礦煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 中國(guó)鐵塔股份有限公司代維交接指南(2017年)
- 常用藥物皮試配制法和藥物過(guò)敏反應(yīng)的急救措施
- 醫(yī)學(xué)微生物學(xué)知到章節(jié)答案智慧樹(shù)2023年山東第一醫(yī)科大學(xué)
- 印刷通用質(zhì)量檢驗(yàn)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論