一个用于在 Ubuntu 22.04.3 LTS 上显示文件系统超级块信息的 C 程序

1.程序

cpp 复制代码
#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.运行结果

相关推荐
readhere4 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI5 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
‎ദ്ദിᵔ.˛.ᵔ₎6 小时前
关于Linux 线程局部存储的认识
linux·运维
小小de风呀8 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
lhbweilai9 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
晚风吹北巷10 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
艾络迅Acceleronix10 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
Zwawa10 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
by2099910 小时前
Linux 压缩传输、进程查看与权限管理
linux·经验分享·1024程序员节