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.運行結果