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;
}

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。