天天看點

linux c 擷取硬碟使用率,如何在C程式中獲得linux下硬碟的使用率?

我想在程式中通過一個線程每隔1分鐘擷取一次linux系統的硬碟使用率,然後根據使用率來做一些其他處理?我利用df -lh系統調用的方法來擷取,可是每次程式執行完這個指令後就退出了,這個問題怎麼解決啊,除此之外還有更好的方法嗎?

請GGJJ盡量說的詳細點,謝謝了!

|

具體的磁盤使用率不好寫。

你使用df 隻是檢視的檔案系統的使用率。還有你使用df調用,效率有點低。

可以用這些函數來調用

int statfs(const char *path, struct statfs *buf);

int fstatfs(int fd, struct statfs *buf);

struct statfs {

long    f_type;     

long    f_bsize;    

long    f_blocks;   

long    f_bfree;    

long    f_bavail;   

long    f_files;    

long    f_ffree;    

fsid_t  f_fsid;     

long    f_namelen;  

};

int fstatvfs(int fildes, struct statvfs *buf);

int statvfs(const char *restrict path, struct statvfs *restrict buf);

struct statvfs {

unsigned long  f_bsize;    

unsigned long  f_frsize;   

fsblkcnt_t     f_blocks;   

fsblkcnt_t     f_bfree;    

fsblkcnt_t     f_bavail;   

fsfilcnt_t     f_files;    

fsfilcnt_t     f_ffree;    

fsfilcnt_t     f_favail;   

unsigned long  f_fsid;     

unsigned long  f_flag;     

unsigned long  f_namemax;  

};

#include

#include

#include

#include

#include

int gethd(char *path);

int main()

{

char buf[256],*ptr;

FILE *file;

while(1)

{

file=fopen("/etc/fstab","r");

if(!file)return;

memset(buf,0,sizeof(buf));

while(fgets(buf,sizeof(buf),file))

{

ptr=strtok(buf," ");

if(ptr&&((strncmp(ptr,"/dev",4)==0)))

{

ptr=strtok(NULL," ");

gethd(ptr);

}

}

fclose(file);

sleep(2);

}

}

int gethd(char *path)

{

struct statvfs stat1;

statvfs(path,&stat1);

if(stat1.f_flag)

printf("%s total=%dK free=%dK %0.1f%%n",path,stat1.f_bsize*stat1.f_blocks/1024,stat1.f_bsize*stat1.f_bfree/1024,((float)stat1.f_blocks-(float)stat1.f_bfree)/(float)stat1.f_blocks*100);

}

你讓他一分種顯示一次,那就一分鐘調用一次就可以了。