1.statvfs结构体
struct statvfs {
unsigned long f_bsize; // 文件系统块大小
unsigned long f_frsize; // 文件系统片段大小
fsblkcnt_t f_blocks; // 文件系统总块数
fsblkcnt_t f_bfree; // 文件系统剩余块数
fsblkcnt_t f_bavail; // 文件系统可用块数
fsfilcnt_t f_files; // 文件系统节点总数
fsfilcnt_t f_ffree; // 文件系统剩余节点数
fsfilcnt_t f_favail; // 文件系统可用节点数
unsigned long f_fsid; // 文件系统标识
unsigned long f_flag; // 挂载标志
unsigned long f_namemax; // 文件名最大长度
};
下面是各个成员的解释:
f_bsize
:文件系统块的大小(以字节为单位)。f_frsize
:文件系统片段的大小(以字节为单位)。片段是文件系统分配的最小单位,通常与块大小相同。f_blocks
:文件系统的总块数。f_bfree
:文件系统的剩余块数。f_bavail
:文件系统的可用块数。这个值通常会考虑到文件系统的保留空间或者配额限制。f_files
:文件系统的总节点数(包括文件和目录)。f_ffree
:文件系统的剩余节点数。f_favail
:文件系统的可用节点数。f_fsid
:文件系统的标识号。f_flag
:文件系统挂载的标志。f_namemax
:文件系统支持的最大文件名长度。在使用
statvfs
函数获取文件系统信息时,可以通过访问statvfs
结构体的成员来获取所需的信息。例如,vfs.f_blocks
可以获取文件系统的总块数,vfs.f_bfree
可以获取文件系统的剩余块数。
2.查看Linux磁盘大小指令 df -h
使用df -h就可以查看各个文件系统的大小
3.C语言计算文件系统大小
#include <stdio.h>
#include <sys/statvfs.h>
int main() {
struct statvfs vfs;
const char *path = "/app"; // 要检查的文件系统路径
if (statvfs(path, &vfs) == 0) {
unsigned long long blockSize = vfs.f_frsize; //块大小
unsigned long long totalSpace = blockSize * vfs.f_blocks;
unsigned long long freeSpace = blockSize * vfs.f_bfree;
unsigned long long availableSpace = blockSize * vfs.f_bavail;
unsigned long long usedSpace = totalSpace - freeSpace;
printf("总空间:%.1fMB\n", (double)(totalSpace/1024/1024));
printf("已使用空间:%.1f MB\n",(double)( usedSpace/1024/1024));
printf("剩余空间:%.1fMB\n", (double)(freeSpace/1024/1024));
printf("可用空间:%.1fMB\n", (double)(availableSpace/1024/1024));
/*
printf("总空间:%llu 字节\n", totalSpace);
printf("已使用空间:%llu 字节\n", usedSpace);
printf("剩余空间:%llu 字节\n", freeSpace);
printf("可用空间:%llu 字节\n", availableSpace);
*/
} else {
printf("无法获取文件系统信息。\n");
}
return 0;
}