最近在学习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,查看磁盘所用情况进行对比: