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 ...
随机推荐
- python的with和__enter__ 、 __exit__
__enter__(): 在使用with语句时调用,会话管理器在代码块开始前调用,返回值与as后的参数绑定 __exit__(): 会话管理器在代码块执行完成好后调用,在with语句完成时,对象销 ...
- 在线分享Oracle尖峰时刻--2014年中秋节尖峰在线福利!
********************************************************** 2014年中秋节尖峰在线福利!*************** ...
- PHP-Java-Bridge使用笔记
最近因为需要封装一个jar包供php调用,在网上搜索了下,基本上讲都是使用php-java-bridge,说实话,网上的教程有很多是不行的,但是功夫不负有心人,找到了一篇文章,也很感谢那篇文章的作者, ...
- go语言基础之switch语句 和 fallthrough 用途
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码: 示例1 ...
- java常用公共代码二之分页代码的实现
在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!! 二.分页代码实现:在项目中,分页是一个项目中必不可少的,它可以防止我们从数据 ...
- Qt正则表达式提取数据
这几天在上嵌入式课程设计,需要用到Qt,这个是信号与槽的,寒假的时候也简单学习了一些,但是没有怎么深入,又回过来看了看Qt,发现Qt的ui界面配置与Android的好像,当然Qt也可以拿来开发Andr ...
- angular中$location读取url信息
读取url信息: <html ng-app="myApp"> <head> <title>angularjs-demo</title> ...
- 外媒关注:中国版Twitter新浪微博推出微米对抗微信
Sina, China’s answer to Twitter, enters the mobile messaging battle with its own app 中国版Twitter新浪,用自 ...
- 【十二】注入框架RoboGuice使用:(Your First Injected ContentProvider)
上一篇我们简单的介绍了一下RoboGuice的使用([十一]注入框架RoboGuice使用:(Your First Injection into a Custom View class)),今天我们来 ...
- Emitting signals
Objects created from a QtCore.QObject can emit signals. In the following example we will see how we ...