胡萝贝୧⍤⃝? 2023-02-23 14:56 采纳率: 46.7%
浏览 23
已结题

使用 statvfs() 检测块设备空间,如何比较?

请问一下,我使用 statvfs() 想检测块设备磁盘空间是否大于6G,该怎么比较呢?我用的这个方法好像行不通。

        int state1;
        struct statvfs vfs1;
        fsblkcnt_t block_size = 0;
        fsblkcnt_t free_size;
        state1 = statvfs("/dev/mmcblk1p7",&vfs1);
        block_size = vfs1.f_bsize;
        free_size = vfs1.f_bfree * block_size;
        int size = (int)free_size/1024/1024/1024;
        if(size > 6){
            //doing something
        }else{
            //doing something
        }
  • 写回答

1条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-23 15:02
    关注

    基于Monster 组和GPT的调写:
    用f_frsize或者f_bsize计算磁盘空间的总大小和剩余空间的大小,然后比较大小来确定是否大于6G
    下面是一个示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/statvfs.h>
    
    int main(void) {
        struct statvfs fs;
        int64_t total_size, free_size, required_size;
    
        if (statvfs("/", &fs) != 0) {
            perror("statvfs");
            exit(EXIT_FAILURE);
        }
    
        total_size = (int64_t)fs.f_frsize * fs.f_blocks;
        free_size = (int64_t)fs.f_frsize * fs.f_bfree;
    
        required_size = 6LL * 1024LL * 1024LL * 1024LL;  // 6 GB in bytes
    
        if (free_size > required_size) {
            printf("Disk space is greater than 6GB.\n");
        } else {
            printf("Disk space is less than or equal to 6GB.\n");
        }
    
        return 0;
    }
    
    
    

    用了f_frsize计算块的大小,然后将其乘以f_blocks和f_bfree来计算磁盘的总大小和剩余空间大小。最后,将6GB的字节数赋值给required_size,并将其与可用空间进行比较。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 2月23日