1.程序
#include <stdio.h>
#include <sys/statvfs.h>
#include <errno.h>
int main(int argc, char *argv[]) {
const char *path;
struct statvfs fs_info;
// 检查参数
if (argc != 2) {
fprintf(stderr, "用法: %s <挂载点或路径>\n", argv[0]);
fprintf(stderr, "示例: %s /\n", argv[0]);
return 1;
}
path = argv[1];
// 获取文件系统信息
if (statvfs(path, &fs_info)){
perror("statvfs 失败");
return errno;
}
// 打印超级块信息
printf("\n文件系统超级块信息 (%s):\n", path);
printf("===============================\n");
printf("文件系统块大小: %lu 字节\n", fs_info.f_bsize);
printf("片段大小: %lu 字节\n", fs_info.f_frsize);
printf("总块数: %lu\n", fs_info.f_blocks);
printf("空闲块数: %lu\n", fs_info.f_bfree);
printf("可用块数: %lu\n", fs_info.f_bavail);
printf("总 inode 数: %lu\n", fs_info.f_files);
printf("空闲 inode 数: %lu\n", fs_info.f_ffree);
printf("可用 inode 数: %lu\n", fs_info.f_favail);
printf("文件系统 ID: %lu\n", fs_info.f_fsid);
printf("挂载标志: 0x%lx\n", fs_info.f_flag);
printf("文件名最大长度: %lu\n", fs_info.f_namemax);
printf("===============================\n");
// 计算空间使用情况
unsigned long total_size = fs_info.f_blocks * fs_info.f_frsize;
unsigned long free_size = fs_info.f_bfree * fs_info.f_frsize;
unsigned long avail_size = fs_info.f_bavail * fs_info.f_frsize;
double used_percent = 100.0 * (1.0 - (double)fs_info.f_bavail / (fs_info.f_blocks - fs_info.f_bfree + fs_info.f_bavail));
printf("\n空间使用情况:\n");
printf("总空间: %.2f GB\n", total_size / (1024.0 * 1024 * 1024));
printf("空闲空间: %.2f GB\n", free_size / (1024.0 * 1024 * 1024));
printf("可用空间: %.2f GB\n", avail_size / (1024.0 * 1024 * 1024));
printf("已用空间: %.1f%%\n", used_percent);
return 0;
}
2.运行结果