apue编程之参考df代码写的一个简单的df命令的源代码
代码:
#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命令的源代码的更多相关文章
- apue编程之参考du代码利用递归写的一个简单的du命令的源代码
#include <stdio.h> #include <stdlib.h> #include <glob.h> #include <string.h> ...
- JS函数 编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数。
编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数. 任务 第一步: 编写代码完成一个函数的定义吧. 第二步: 我们来补充函数体中的控制语句,完成函数功能吧. 提示: ...
- 写了一个简单的CGI Server
之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- 自己写的一个简单PHP采集器
自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...
- 写了一个简单可用的IOC
根据<架构探险从零开始写javaweb框架>内容写的一个简单的 IOC 学习记录 只说明了主要的类,从上到下执行的流程,需要分清主次,无法每个类都说明,只是把整个主线流程说清楚,避免 ...
- 写了一个简单的 Mybatis
写了一个简单的 Mybatis,取名 SimpleMybatis . 具备增删改查的基本功能,后续还要添加剩下的基本数据类型和Java集合类型的处理. 脑图中有完整的源码和测试的地址 http://n ...
- python实战:用70行代码写了一个山炮计算器!
python实战训练:用70行代码写了个山炮计算器! 好了...好了...各位因为我是三年级而发牢骚的各位伙伴们,我第一次为大家插播了python的基础实战训练.这个,我是想给,那些python基础一 ...
- 50行代码写的一个插件,破解一个H5小游戏
小游戏链接:测测你的眼睛对色差的辨识度http://www.webhek.com/post/color-test.html?from=timeline 废话不多说,先放代码: window.onloa ...
随机推荐
- Integer判断相等,到底该用==还是equals
在项目中涉及到整数判断的时候一直都是使用"=="进行判断的,但是用的时候心里老是在犯嘀咕,是不是应该使用equals呀?今天来看下这个问题! 在Object类中,equals方法的 ...
- 服务器主机上RAID Card的Write Caching Policy
在Cisco Server的DRAC中, 创建virtual drive时, 会看到下面的选项. 那么Write back, write through, write back bad BBU之间 ...
- MapReduce开发技巧
数据类型的选择 自定义数据类型 参考:Hadoop提交作业自定义排序和分组 MapWritable/SortedMapWritable Hadoop中可传输的Map集合,和Java中的Map用法差不多 ...
- An extensible Factory Pattern example
I have read the book Api Design For C++ recently , and I must say that it is a masterpiece. There is ...
- JQuery EasyUI 动态改变表单项的验证守则
//JQuery EasyUI 动态改变表单项的验证规则 $(document).ready(function(){ $('#FILE_QUALITY').combobox({ onChange:fu ...
- PHP如何使用免费在线客服插件
1 你可以从以下网址下载http://www.hur.cn/Soft/2011/12448.html 2 解压并放到任意文件夹下 3 在安装之前,先在数据库中创建一个完整的数据库,因为待会儿安装完成之 ...
- UNIX网络编程读书笔记:字节操纵函数
#include <strings.h> void bzero(void *dest, size_t nbytes); void bcopy(const void *src, void * ...
- CodeForces 2A - Winner(模拟)
题目链接:http://codeforces.com/problemset/problem/2/A A. Winner time limit per test 1 second memory limi ...
- js 实现图片的无缝滚动
js 实现图片的无缝滚动 CreateTime--2018年3月7日17:18:34 Author:Marydon 测试成功 <!DOCTYPE html> <html> ...
- MongoDB 日志太大怎么办?
MongoDB的日志增长的非常快,/var所在的空间立即就占满了,即便换到还有一个磁盘分区保存日志.日志还是增长的非常快.磁盘眼看要告磬. 有一个好办法,就是使用旋转日志. MongoDB的旋转日志有 ...