linux系统获取硬盘使用信息

2019-10-14 21:42:43王振洲

测试程序如下所示:


#include <stdio.h>
#include <sys/statfs.h>
#include <sys/vfs.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    struct statfs disk_info;
    char *path = "/home/";
    int ret = 0;
    if (argc == 2)
    {
      path = argv[1];
    }
    if (ret == statfs(path, &disk_info) == -1)
    {
      fprintf(stderr, "Failed to get file disk infomation,
          errno:%u, reason:%sn", errno, strerror(errno));
      return -1;
    }
    long long total_size = disk_info.f_blocks * disk_info.f_bsize;
    long long available_size = disk_info.f_bavail * disk_info.f_bsize;
    long long free_size = disk_info.f_bfree * disk_info.f_bsize;
    //输出每个块的长度,linux下内存块为4KB
    printf("block size: %ld bytesn", disk_info.f_bsize);
    //输出块个数
    printf("total data blocks: %ld n", disk_info.f_blocks);
    //输出path所在磁盘的大小
    printf("total file disk size: %d MBn",total_size >> 20);
    //输出非root用户可以用的磁盘空间大小
    printf("avaiable size: %d MBn",available_size >> 20);
    //输出硬盘的所有剩余空间
    printf("free size: %d MBn",free_size >> 20);
    //输出磁盘上文件节点个数
    printf("total file nodes: %ldn", disk_info.f_files);
    //输出可用文件节点个数
    printf("free file nodes: %ldn", disk_info.f_ffree);
    //输出文件名最大长度
    printf("maxinum length of file name: %ldn", disk_info.f_namelen);
    return 0;
}

测试结果如下所示: