linux下C编程--利用statfs函数查看磁盘空间

利用statfs函数查看磁盘空间。
参考资料

linux下C编程–利用statfs函数查看磁盘空间

发现给出的程序和系统的df命令的输出有点儿差异,看了busybox里面df命令的实现,发现df命令按1K做了四舍五入。

//2016-02-20
//
//计算指定路径下的已用空间和可用空间。
//

#include <sys/statfs.h>
#include <stdio.h>
#include <stdint.h>

//四舍五入并缩小1024
static unsigned long kscale(unsigned long b, unsigned long bs)
{
    return (b * (unsigned long long)bs + 1024/2) / 1024;
}

int main(void)
{
    struct statfs diskInfo;

    statfs("/home/linux", &diskInfo);
    unsigned long long blockSize = diskInfo.f_bsize;                        // 每个block里包含的字节数
    unsigned long long totalSize = kscale(diskInfo.f_blocks, blockSize);    // 总的字节数,f_blocks为block的数目
    unsigned long long freeSize = kscale(diskInfo.f_bfree, blockSize);      // 剩余空间的大小
    unsigned long long availableSize = kscale(diskInfo.f_bavail, blockSize);// 可用空间大小
    unsigned long long usedSize = totalSize - freeSize;

    printf("freeSize = %lld KB = %lld MB = %lld GB\n",
        freeSize, freeSize >> 10, freeSize >> 20);
    printf("availableSize = %lld KB = %lld MB = %lld GB\n",
        availableSize, availableSize >> 10, availableSize >> 20);
    printf("%9s %9s %9s\n", "1K-blocks", "Used", "Available");
    printf("%9lld %9lld %9lld\n", totalSize, usedSize, availableSize);

    return 0;
}

和系统的df命令的输出是一样的。

~$ df /home/linux/
Filesystem                                             1K-blocks     Used Available Use% Mounted on
/dev/disk/by-uuid/7dc8e796-8858-4212-acb3-a234a75fec97 114323040 66536748  41955892  62% /
~$ ./statfs
freeSize = 47786292 KB = 46666 MB = 45 GB
availableSize = 41955892 KB = 40972 MB = 40 GB
1K-blocks      Used Available
114323040  66536748  41955892
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值