linux下利用statfs函数查看磁盘使用情况

时间:2024-03-01 15:22:33

  最近在学习Linux的过程中,需要查看磁盘使用情况,于是查找资料,发现statfs函数可以胜任这个任务.下面将简单介绍statfs函数及其使用。
  函数如下:
  int statfs(const charpath, struct statfsbuf);
 参数:
  path: 位于需要查询信息的文件系统的文件路径
  buf: statfs结构体类型的指针变量,用于存储文件系统的相关信息
  **

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

要使用该函数首先要导入<sys/statfs.h>头文件,下面是一个简单的测试:

#include <sys/statfs.h>
#include <stdio.h>
#include <stdint.h>

#define KB 1024.0       // 2^10
#define MB 1048576.0    // 2^20 
#define GB 1073741824.0 // 2^30 

int main(void)
{
        struct statfs diskInfo;

        statfs("/home/", &diskInfo);
        uint64_t blocksize = diskInfo.f_bsize;                   // 每个block里包含的字节数
        uint64_t totalsize = blocksize * diskInfo.f_blocks;      // 总的字节数,f_blocks为block的数目
        printf("块数:%lld",diskInfo.f_blocks);
        printf("Total_size = %lld B = %f KB = %f MB = %f GB\n",
                totalsize,
                totalsize / KB,
                totalsize / MB,
                totalsize / GB);

        uint64_t freeDisk = diskInfo.f_bfree * blocksize;       // 剩余空间的大小
        uint64_t availableDisk = diskInfo.f_bavail * blocksize; // 可用空间大小
        printf("Disk_free = %f MB = %f GB\n"
                        "Disk_available = %f MB = %f GB\n",
                freeDisk / MB,
                freeDisk / GB,
                availableDisk / MB,
                availableDisk / GB);

        return 0;
}

  运行结果如下图所示:
在这里插入图片描述
键入 df -h /home,查看磁盘所用情况进行对比:
在这里插入图片描述