我想在程序中通过一个线程每隔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);
}
你让他一分种显示一次,那就一分钟调用一次就可以了。