代码:

#include <stdio.h>
#include <mntent.h>
#include <string.h>
#include <sys/vfs.h>
**1024ull;
*;
;
];
char* kscale(unsigned long b, unsigned long bs)
{
    unsigned long long size = b * (unsigned long long)bs;
    if (size > G)
    {
        sprintf(str, "%0.2f GB", size/(G*1.0));
        return str;
    }
    else if (size > M)
    {
        sprintf(str, "%0.2f MB", size/(1.0*M));
        return str;
    }
    else if (size > K)
    {
        sprintf(str, "%0.2f K", size/(1.0*K));
        return str;
    }
    else
    {
        sprintf(str, "%0.2f B", size*1.0);
        return str;
    }
}
int main(int argc, char *argv[])
{
    FILE* mount_table;
    struct mntent *mount_entry;
    struct statfs s;
    unsigned long blocks_used;
    unsigned blocks_percent_used;
    const char *disp_units_hdr = NULL;
    mount_table = NULL;
    mount_table = setmntent("/etc/mtab", "r");
    if (!mount_table)
    {
        fprintf(stderr, "set mount entry error\n");
        ;
    }
    disp_units_hdr = "     Size";
    printf("Filesystem           %-15sUsed Available %s Mounted on\n",
            disp_units_hdr, "Use%");
    ) {
        const char *device;
        const char *mount_point;
        if (mount_table) {
            mount_entry = getmntent(mount_table);
            if (!mount_entry) {
                endmntent(mount_table);
                break;
            }
        }
        else
            continue;
        device = mount_entry->mnt_fsname;
        mount_point = mount_entry->mnt_dir;
        //fprintf(stderr, "mount info: device=%s mountpoint=%s\n", device, mount_point);
        )
        {
            fprintf(stderr, "statfs failed!\n");
            continue;
        }
        ) || !mount_table )
        {
            blocks_used = s.f_blocks - s.f_bfree;
            blocks_percent_used = ;
            if (blocks_used + s.f_bavail)
            {
                blocks_percent_used = (blocks_used * 100ULL
                        + (blocks_used + s.f_bavail)/
                        ) / (blocks_used + s.f_bavail);
            }
            /* GNU coreutils 6.10 skips certain mounts, try to be compatible.  */
            )
                continue;
            , device) > )
                    printf("\n%-20s", "");
            ];
            ];
            ];
            strcpy(s1, kscale(s.f_blocks, s.f_bsize));
            strcpy(s2, kscale(s.f_blocks - s.f_bfree, s.f_bsize));
            strcpy(s3, kscale(s.f_bavail, s.f_bsize));
            printf(" %9s %9s %9s %3u%% %s\n",
                    s1,
                    s2,
                    s3,
                    blocks_percent_used, mount_point);
        }
    }
    ;
}

运行效果如下:

编译:g++ -g -Wall main.cpp

可以生成一个a.out的文件,

下面是运行a.out和df -h的输出对比:

:/tmp/tmp$ df -h
文件系统            容量  已用 可用 已用% 挂载点
/dev/sda7             .4G  .5G  .5G  % /
none                  .6G  300K  .6G   % /dev
none                  .6G  212K  .6G   % /dev/shm
none                  .6G  296K  .6G   % /var/run
none                  .6G       .6G   % /var/lock
none                  .6G       .6G   % /lib/init/rw
/dev/sda6             113G   87G   26G  % /media/work_
/dev/sda9              26G   23G  .0G  % /home

/tmp/tmp$ ./a.out
Filesystem                Size      Used Available Use% Mounted on
/dev/sda7              % /
none                   % /dev
none                   % /dev/shm
none                   % /var/run
none                   % /var/lock
none                   % /lib/init/rw
/dev/sda6            % /media/work_
/dev/sda9             % /home

apue编程之参考df代码写的一个简单的df命令的源代码的更多相关文章

  1. apue编程之参考du代码利用递归写的一个简单的du命令的源代码

    #include <stdio.h> #include <stdlib.h> #include <glob.h> #include <string.h> ...

  2. JS函数 编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数。

    编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数. 任务 第一步: 编写代码完成一个函数的定义吧. 第二步: 我们来补充函数体中的控制语句,完成函数功能吧. 提示: ...

  3. 写了一个简单的CGI Server

    之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...

  4. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  5. 自己写的一个简单PHP采集器

    自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...

  6. 写了一个简单可用的IOC

    根据<架构探险从零开始写javaweb框架>内容写的一个简单的 IOC 学习记录    只说明了主要的类,从上到下执行的流程,需要分清主次,无法每个类都说明,只是把整个主线流程说清楚,避免 ...

  7. 写了一个简单的 Mybatis

    写了一个简单的 Mybatis,取名 SimpleMybatis . 具备增删改查的基本功能,后续还要添加剩下的基本数据类型和Java集合类型的处理. 脑图中有完整的源码和测试的地址 http://n ...

  8. python实战:用70行代码写了一个山炮计算器!

    python实战训练:用70行代码写了个山炮计算器! 好了...好了...各位因为我是三年级而发牢骚的各位伙伴们,我第一次为大家插播了python的基础实战训练.这个,我是想给,那些python基础一 ...

  9. 50行代码写的一个插件,破解一个H5小游戏

    小游戏链接:测测你的眼睛对色差的辨识度http://www.webhek.com/post/color-test.html?from=timeline 废话不多说,先放代码: window.onloa ...

随机推荐

  1. react组件引用时的default常见错误

    1.下面使用方法是正确的: export class StepLoad extends React.Component {} 引用上面插件的方法,重命名 import {StepLoad as Ste ...

  2. java.io.FileNotFoundException: ***(Too many open files)

    http://yizhilong28.iteye.com/blog/1154098 在linux下跑一个多线程读取文件的程序,待读取文件有数十万个.程序读取过程中抛出如下异常*****(Too man ...

  3. go语言基础之流程控制 if语句

    Go语言支持最基本的三种程序运行结构:顺序结构.选择结构.循环结构. 顺序结构:程序按顺序执行,不发生跳转. 选择结构:依据是否满足条件,有选择的执行相应功能. 循环结构:依据条件是否满足,循环多次执 ...

  4. ElementUI日期选择器时间选择范围限制

    ElementUI是饿了么推出的一套基于vue2.x的一个ui框架.官方文档也很详细,这里做一个element-ui日期插件的补充,官方文档中使用picker-options属性来限制可选择的日期,这 ...

  5. jquery easyui里datagrid用法记录

    1.删除行方法(deleteRow) $(); //1代表选中的行索引 2.删除多行数据 var rows = $('#ruleManagementTable').datagrid("get ...

  6. iOS 设备信息获取

    參考:http://blog.csdn.net/decajes/article/details/41807977參考:http://zengrong.net/post/2152.htm1. 获取设备的 ...

  7. 使用百度地图API实现轨迹回放

    调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...

  8. Event.RESIZE 的事件不触发

    stage.scaleMode=StageScaleMode.NO_SCALE;(或者设置其他缩放模式,如EXACT_FIT等):   如果没有设置 stage的缩放模式的话, stage.addEv ...

  9. sql分页性能测试结果

    --方案一: declare @d datetime set @d = getdate() ID from Info order by ID) order by ID select [not in方法 ...

  10. OSG 集群渲染 cluster render 支持 Cave 和 powerwall 模式

    写了几天.用OSG,实现了集群渲染,感觉还不错,线性加速比还算能够.採用KDTree .八叉树管理场景.场景数据通过UDP和TCP. 不用复制文件,直接在线读取(主节点向渲染节点同步模型数据).效率基 ...