• 【Linux环境】linux下利用内核statfs()函数查看磁盘的使用情况


           最近有开发有个需求,需要根据系统中某一文件系统的总容量规模情况,进行弹性调节回收资源线程的启动时机。本人的环境是linux,并且需要用c语言进行处理。

            网上查找资料发现内核函数statfs可以完成这个任务,下面就结合网上的一些资料和书上的一些信息,简单介绍一下这个函数和它的使用方法。

           1.  函数的声明如下:

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

           (1) 入参:

        path:位于需要查询信息的文件系统的文件的路径;

             buf: statfs结构体类型的指针变量,用于存储文件系统的相关信息。

           (2)statfs结构体:

     1 struct statfs{
     2     long f_type;     //文件系统的类型
     3     long f_bsize;   //经优化后的传输块的大小
     4     long f_blocks;  //文件系统数据块总数
     5     long f_bfree;    //可用块数
     6     long f_bavail;   //普通用户能够获得的块数
     7     long f_files;      //文件结点总数
     8     long f_ffree;     //可用文件结点数
     9     fisd_t f_fsid;     //文件系统标识
    10     long f_namelen;  //文件名的最大长度
    11 }

       (3)注意点

        这个函数在<sys/statfs.h>头文件中包含着,所以编码时需要引用进去。

      2. 编写简单测试用例

      动手的机会来了,简单的测试代码如下:

      

     1 #include <sys/statfs.h>
     2 #include <stdio.h>
     3 
     4 int main(int argc,char **argv)
     5 {
     6     struct statfs diskInfo;
     7     
     8     /* 1.获取/home/下面的总容量 */
     9     statfs("/home/", &diskInfo);
    10     unsigned long long blocksize = diskInfo.f_bsize;    //每个block里包含的字节数
    11     unsigned long long totalsize = blocksize * diskInfo.f_blocks;//总的字节数,f_blocks为block的数目
    12     printf("Total_size=%llu B =%llu KB =%llu MB = %llu GB\n",
    13            totalsize,totalsize>>10,totalsize>>20, totalsize>>30);
    14     
    15     /* 2.获取一下剩余空间和可用空间的大小 */
    16     unsigned long long freeDisk = diskInfo.f_bfree * blocksize;  //剩余空间的大小
    17     unsigned long long availableDisk = diskInfo.f_bavail * blocksize; //可用空间大小
    18     printf("Disk_free=%llu MB =%llu GB Disk_available=%llu MB = %llu GB\n",
    19            freeDisk>>20,freeDisk>>30,availableDisk>>20, availableDisk>>30);
    20     
    21     return 0;
    22 }

      结果如下:

      

      然后df -h看一下实际结果:

      

  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/coreLeo/p/16055020.html
Copyright © 2020-2023  润新知