一个用于在 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.运行结果

相关推荐
Tinyundg2 小时前
Linux系统分区
linux·运维·服务器
梵刹古音2 小时前
【C语言】 循环结构
c语言·开发语言·算法
江畔何人初2 小时前
service发现
linux·运维·云原生
life码农3 小时前
Linux系统清空文件内容的几种方法
linux·运维·chrome
皮皮哎哟3 小时前
冒泡排序与数组传递全解析 一维二维指针数组及二级指针应用指南
c语言·算法·冒泡排序·二维数组·指针数组·传参·二级指针
蒸蒸yyyyzwd3 小时前
c网络编程学习笔记
c语言·网络·学习
zbguolei3 小时前
虚拟机安装Ubuntu后无法登录
linux·运维·ubuntu
UP_Continue3 小时前
Linux--基础IO
linux·运维·服务器
驱动探索者3 小时前
linux hwspinlock 学习
linux·运维·学习
FJW0208143 小时前
使用HAProxy实现动静分离
linux·服务器