天天看点

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);

}

你让他一分种显示一次,那就一分钟调用一次就可以了。