zoukankan      html  css  js  c++  java
  • Linux编程之判断磁盘空间大小

    一、引言

    在开发过程中,经常会碰到这样的情况,在往指定目录下拷贝文件时,需要考虑到磁盘空间的大小是否足够来决定什么时候暂停自己的程序

    二、用的函数

    <sys/statfs.h>

     int statfs(const char *path, struct statfs *buf); 

    参考:http://man7.org/linux/man-pages/man2/statfs.2.html

    三、示例

    // 磁盘空间类型
    enum EMDiskSizeType
    {
        TOTAL_SIZE, // 全部空间
        FREE_SIZE     // 剩余空间
    };
    
    //*****************************************************************************
    //@Function                : 统计指定路径所在磁盘的大小
    //@in                     : strDir 指定路径
    //@in                    : diskType 指定需要的磁盘大小类型,TOTAL_SIZE:总大小
    //FREE_SIZE:剩余大小
    //@Description            : 返回指定路径所在磁盘的大小,单位MB
    //*****************************************************************************
    unsigned long long GetDiskSize(string strDir, EMDiskSizeType diskType)
    {
        unsigned long long llCount = 0;
        struct statfs diskInfo;
        if (statfs(strDir.c_str(), &diskInfo) == -1)
        {
            OutLog(SLL_ERROR, "getdisksize error, errno : %d, error : %s", errno, strerror(errno));
            llCount = 0;
        }
        else
        {
            switch(diskType)
            {
                case TOTAL_SIZE:
                    llCount = diskInfo.f_bsize * diskInfo.f_blocks;
                    llCount = llCount >> 20;
                    break;
                case FREE_SIZE:
                    llCount = diskInfo.f_bsize * diskInfo.f_bfree;
                    llCount = llCount >> 20;
                    break;
                default:
                    llCount = 0;
                    break;
            }
        }
        return llCount;
    }

    对该函数进行了一个简单的封装,实现的功能是:返回指定路径所在磁盘的指定类型大小(总大小、剩余大小)

  • 相关阅读:
    Protobuf
    CPU profiling
    转 Unicode 和 UTF-8 的区别
    Redis数据结构底层知识总结
    MySQL 加锁处理分析 ---非常牛逼
    MySQL Gap Lock问题
    利用Linux文件系统内存cache来提高性能
    Xcode7安装CocoaPods
    字符串排列组合算法
    iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4209973.html
Copyright © 2011-2022 走看看