当前位置:  技术问答>linux和unix

如何在C程序中获得linux下硬盘的使用率?

    来源: 互联网  发布时间:2016-03-23

    本文导语:  我想在程序中通过一个线程每隔1分钟获取一次linux系统的硬盘使用率,然后根据使用率来做一些其他处理?我利用df -lh系统调用的方法来获取,可是每次程序执行完这个命令后就退出了,这个问题怎么解决啊,除此...

我想在程序中通过一个线程每隔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;     /* type of filesystem (see below) */
                 long    f_bsize;    /* optimal transfer block size */
                 long    f_blocks;   /* total data blocks in file system */
                 long    f_bfree;    /* free blocks in fs */
                 long    f_bavail;   /* free blocks avail to non-superuser */
                 long    f_files;    /* total file nodes in file system */
                 long    f_ffree;    /* free file nodes in fs */
                 fsid_t  f_fsid;     /* file system id */
                 long    f_namelen;  /* maximum length of filenames */
              };


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

 struct statvfs {
           unsigned long  f_bsize;    /* file system block size */
           unsigned long  f_frsize;   /* fragment size */
           fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
           fsblkcnt_t     f_bfree;    /* # free blocks */
           fsblkcnt_t     f_bavail;   /* # free blocks for non-root */
           fsfilcnt_t     f_files;    /* # inodes */
           fsfilcnt_t     f_ffree;    /* # free inodes */
           fsfilcnt_t     f_favail;   /* # free inodes for non-root */
           unsigned long  f_fsid;     /* file system id */
           unsigned long  f_flag;     /* mount flags */
           unsigned long  f_namemax;  /* maximum filename length */
         };


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


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


    
 
 

您可能感兴趣的文章:

  • 怎么写个CGI程序获取远程linux主机的信息,如cpu使用率,内存使用等?
  • Liunx 如何查看 一个多进程程序 CPU使用率等等
  • XWindows, 进入之后,就算什么其它程序都不运行,内存使用率也不断增加, 有谁和我一样?
  • 怎么样用程序取得Linux系统的CPU利用率和内存的使用情况呀?
  • 在UNIX中如何通过程序获得主机的资源使用状况,CPU利用率等。
  • Linux下怎么用程序获得U盘盘符文件
  • 怎样获得shell程序执行的路径
  • 请问gcc有没有类似GetExitCodeProcess的函数,可以获得调用的外部程序的返回值呢?
  • 如何不写驱动通过应用程序获得一块内存并取得它的物理地址?
  • 在程序中如何获得某个进程的CPU占用率
  • 在程序中如何获得某个硬盘或者目录的剩余空间?
  • 用什么函数在程序中获得环境变量的值?
  • 怎样在Application中获得程序的当前路径?
  • 在linux中,如何在程序中获得分辨率!
  • 请问:如何在java程序内获得 .class 文件的全路径?
  • 如何获得MYSQL驱动程序接口?
  • 请教,在程序运行中,获得屏幕输出信息
  • 能获得调用其它程序的时返回的参数吗?
  • 请问如何在程序中获得shell命令输出的信息?
  • 如何在java程序中获得拨号上网分配的动态IP?
  • sql server数据库有没有专门的jdbc驱动程序,若有,请教怎样获得?
  • 怎样用程序获得网卡地址!那位仁兄能告知
  • 送分! UNIX C编程。 程序中如何获得当前运行目录? .
  • 从哪儿可以获得jbuilder或者其他java程序的源代码
  • 请问gcc有没有类似CreateProcess的函数,可以获得调用的外部程序的进程ID呢?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 都是“主引导程序”惹的祸————硬盘的主引导程序被修改后应该如何恢复???
  • 可不可以在windows下运行硬盘上的linux安装程序?
  • 程序如何动态检测USB硬盘的插入及如何判断有几个分区
  • 在 uclinux 上面 进行编程,程序如何对硬盘进行格式化和分区?
  • 安装Ubuntu时安装程序,找不到硬盘分区
  • 硬盘安装的红帽子9.0,没有光盘,怎么在添加新程序
  • 我是硬盘安装的red hat 之后怎么才能添加linux自带光盘里的程序啊
  • 跪求:请问如何在程序中写代码调用函数对硬盘进行分区和格式化
  • 请问linux下程序中如何检测移动硬盘的插入拔除?
  • 在程序中如何给硬盘分区。
  • 怎样用java 程序查看 像硬盘大小 以及各分区的剩余空间之类的信息?
  • UNIX下用custom安装程序Media Device选择Media images时硬盘镜像文件如何命名
  • 我用的是硬盘ISO文件按装的RH9.0,怎么再添加应用程序呀?
  • Linux查看硬盘大小,用C/C++程序写。
  • RH-Linux 9下添加删除程序需要插入cd1,但我是从硬盘安装的。如何修改安装源文件路径?
  • 求教硬盘安装Debian,进入安装程序后的详细方法
  • 我从硬盘安装了红旗4.1桌面版,如何安装其他镜像文件上的程序?
  • 系统做的硬件RAID5,扩充硬盘后,可以扩大分区大小吗?这样会损坏以前的系统,应用程序吗?
  • rh9中不开程序硬盘自己读的问题。
  • 请问,谁研究过Linux的块设备驱动程序,IDE硬盘这部分的?我有几个问题要问
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3