通過編程獲取Linux文件系統(tǒng)使用的詳細(xì)信息_第1頁
通過編程獲取Linux文件系統(tǒng)使用的詳細(xì)信息_第2頁
通過編程獲取Linux文件系統(tǒng)使用的詳細(xì)信息_第3頁
通過編程獲取Linux文件系統(tǒng)使用的詳細(xì)信息_第4頁
通過編程獲取Linux文件系統(tǒng)使用的詳細(xì)信息_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

通過編程獲取Linux文件系統(tǒng)使用的詳細(xì)信息去年的操作系統(tǒng)課程設(shè)計(jì),我做了一個(gè)基于linux到任務(wù)管理器。大部分需要到系統(tǒng)信息都是從linux下的一個(gè)偽文件系統(tǒng)/proc中讀出的。大家都知道,此文件系統(tǒng)只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。用戶和應(yīng)用程序可以通過proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。比如說我想看一下系統(tǒng)cpu的信息,由于其信息存于/proc/cpuinfo中,所以我們在終端用輸入如下命令:cat/proc/cpuinfo即可查看要查看到信息,如果要使用其中到某項(xiàng)信息則通過文件操作讀出即可(當(dāng)然要有一些處理)。其他像內(nèi)存、進(jìn)程等各項(xiàng)信息都能按照這種操作得到。可唯獨(dú)在獲取文件系統(tǒng)使用信息時(shí)遇到了問題,先來看一下我們這個(gè)項(xiàng)目中要做出的一個(gè)類似頁面:500)this.width=500;"height="478"width="514"border="0">圖中所顯示的設(shè)備、目錄等信息既是我們希望從系統(tǒng)中得到到信息,可/proc目錄中記錄文件信息的文件partitions記錄的信息于我們想要得到到信息相差太遠(yuǎn),changyan@changyan-fly:~$cat/proc/partitionsmajorminor#blocksname80244198584sda8138427448sda1821sda28563898506sda58661440561sda68710241406sda78846138648sda88921430678sda9810650601sda108111967931sda11看到了吧,里面的信息只有這幾項(xiàng),顯然不行。后來,我又以為所需到信息可以從/dev下的文件中查找,可那里面到文件都是不可讀的,我不停的在/proc下分析每個(gè)文件內(nèi)容,可都沒有我想要到內(nèi)容,這個(gè)過程非常郁悶??蓡栴}昨天晚上還是解決了,我通過系統(tǒng)調(diào)用實(shí)現(xiàn)的,在此,我將代碼公開,一是讓大家看一下,再一個(gè)就是如果哪位仁兄有能在文件中直接讀出的方法,希望能告知一二,在此不勝感激。下面這個(gè)程序是我和同學(xué)不斷討論后設(shè)計(jì)出的一個(gè)非常巧妙的解決方案,具體代碼如下://讀出系統(tǒng)文件系統(tǒng)的使用情況,并打印輸出//};intmain(){DiskInfo*disk_info;structstatfsfs_info;structmntent*mnt_info;FILE*fh;floatpercent;//用于存儲設(shè)備使用百分比longtotal_free=0;//用于存儲linux下尚余磁盤空間if((fh=setmntent("/etc/mtab","r"))==NULL){printf("Cannotopen\'/etc/mtab\'!\n");return-1;}while((mnt_info=getmntent(fh))!=NULL){if(statfs(mnt_info->mnt_dir,&fs_info)<0){continue;}if((disk_info=(DiskInfo*)malloc(sizeof(DiskInfo)))==NULL){continue;}//通過判斷找到要找的格式if(strcmp(mnt_info->mnt_type,"proc")&&strcmp(mnt_info->mnt_type,"devfs")&&strcmp(mnt_info->mnt_type,"usbfs")&&strcmp(mnt_info->mnt_type,"sysfs")&&strcmp(mnt_info->mnt_type,"tmpfs")&&strcmp(mnt_info->mnt_type,"devpts")&&strcmp(mnt_info->mnt_type,"fusectl")&&strcmp(mnt_info->mnt_type,"debugfs")&&strcmp(mnt_info->mnt_type,"binfmt_misc")&&strcmp(mnt_info->mnt_type,"fuse.gvfs-fuse-daemon")&&strcmp(mnt_info->mnt_type,"securityfs")){if(fs_info.f_blocks!=0){percent=(((float)fs_info.f_blocks-(float)fs_info.f_bfree)*100.0/(float)fs_info.f_blocks);}else{percent=0;}}else{continue;}//將系統(tǒng)中的各項(xiàng)信息存于結(jié)構(gòu)體相對應(yīng)到變量中strcpy(disk_info->type,mnt_info->mnt_type);strcpy(disk_info->device,mnt_info->mnt_fsname);strcpy(disk_info->mntpnt,mnt_info->mnt_dir);longblock_size=fs_info.f_bsize/1024;disk_info->blocks=fs_info.f_blocks*block_size/1024;disk_info->bfree=fs_info.f_bfree*block_size/1024;disk_info->available_disk=fs_info.f_bavail*block_size/1024;disk_info->bused=(fs_info.f_blocks-fs_info.f_bfree)*block_size/1024;disk_info->bused_percent=(int)percent;printf("塊大?。?dB\n",fs_info.f_bsize);//經(jīng)測試每塊大小不一定一樣,根據(jù)分區(qū)格式確定的//將各項(xiàng)信息打印輸出printf("設(shè)備號:%s目錄:%s文件類型:%s總數(shù):%ldMB空閑:%ldMB可用:%ldMB已用:%ldMB已用百分比:%d\n\n\n",disk_info->device,disk_info->mntpnt,disk_info->type,disk_info->blocks,disk_info->bfree,disk_info->available_disk,disk_info->bused,disk_info->bused_percent);if((strcmp(disk_info->mntpnt,"/")==0)||(strcmp(disk_info->mntpnt,"/boot")==0)){total_free+=disk_info->available_disk;}};printf("\nlinux下總的磁盤可用空間:%ldMB\n",total_free);printf("\nSuccess!\n");return0;運(yùn)行過程:changyan@changyan-fly:~/桌面/gcc$gcc-cfile2.c-ofile2.ochangyan@changyan-fly:~/桌面/gcc$gccfile2.o-ofile2changyan@changyan-fly:~/桌面/gcc$./file2塊大?。?096B設(shè)備號:/dev/sda9目錄:/文件類型:ext4總數(shù):20599MB空閑:17203MB可用:16157MB已用:3396MB已用百分比:16塊大小:4096B設(shè)備號:/dev/sda10目錄:/boot文件類型:ext4總數(shù):625MB空閑:579MB可用:547MB已用:45MB已用百分比:7塊大?。?096B設(shè)備號:/dev/sda1目錄:/media/SYSTEM文件類型:fuseblk總數(shù):37526MB空閑:21136MB可用:21136MB已用:16390MB已用百分比:43塊大?。?2768B設(shè)備號:/dev/sda5目錄:/media/SOURCE文件類型:vfat總數(shù):62385MB空閑:35201MB可用:35201MB已用:27184MB已用百分比:43塊大?。?096B設(shè)備號:/dev/sda6目錄:/media/Study文件類型:fuseblk總

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論