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

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

posted @ 2015-01-08 09:14  冷冰若水  阅读(764)  评论(0编辑  收藏  举报