源代码例如以下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/vfs.h> //文件系统信息结构体
struct fileSystem_info{
char fileSystem_format[8];
char fileSystem_total_capacity[11];
char fileSystem_free_capacity[11];
char fileSystem_permissions[3];
}; /*获取文件系统信息*/
int get_fileSystem_info(const char *fileSystem_name, struct fileSystem_info *fi); /*block to kbyte*/
static unsigned long kscale(unsigned long m_block, unsigned long m_kbyte); /*convert size to GB MB KB*/
static char *convert_size(float m_size, char *dest); int main()
{
char buf[1024];
struct fileSystem_info fileSysInfo;
get_fileSystem_info("/",&fileSysInfo); printf("%s\n",fileSysInfo.fileSystem_format);
printf("%s\n",fileSysInfo.fileSystem_free_capacity);
printf("%s\n",fileSysInfo.fileSystem_total_capacity);
printf("%s\n",fileSysInfo.fileSystem_permissions); return 0;
} /*获取文件系统信息*/
int get_fileSystem_info(const char *fileSystem_name,struct fileSystem_info *fi)
{
struct statfs buf;
float fileSystem_total_size = 0;
float fileSystem_free_size = 0; if(statfs(fileSystem_name,&buf))
{
fprintf(stderr,"statfs %s\n",strerror(errno));
return -1;
} switch(buf.f_type)
{
case 0xEF51:
case 0xEF53:
sprintf(fi->fileSystem_format,"EXT");
break; case 0x4d44:
sprintf(fi->fileSystem_format,"FAT");
break; case 0x5346544e:
sprintf(fi->fileSystem_format,"NIFS");
break; default:
sprintf(fi->fileSystem_format,"unknown");
break;
} bzero(&fi->fileSystem_total_capacity,sizeof(fi->fileSystem_total_capacity));
bzero(&fi->fileSystem_free_capacity,sizeof(fi->fileSystem_free_capacity)); printf("blocks %ld\n",buf.f_blocks);
printf("bfree %ld\n",buf.f_bfree);
printf("bsize %ld\n",buf.f_bsize); fileSystem_total_size =
(float)(kscale(buf.f_blocks, buf.f_bsize));
fileSystem_free_size =
(float)(kscale(buf.f_bfree, buf.f_bsize)); printf("total %f\n",fileSystem_total_size);
printf("free %f\n",fileSystem_free_size); convert_size(fileSystem_total_size,fi->fileSystem_total_capacity);
convert_size(fileSystem_free_size,fi->fileSystem_free_capacity); bzero(fi->fileSystem_permissions,sizeof(fi->fileSystem_permissions));
sprintf(fi->fileSystem_permissions,"rw"); return 0;
} /*block to kbyte*/
static unsigned long kscale(unsigned long m_block, unsigned long m_kbyte)
{ return ((unsigned long long) m_block * m_kbyte + 1024 / 2 ) /1024;
} /*convert size to GB MB KB*/
static char *convert_size(float m_size, char *dest)
{
if((((m_size / 1024.0) / 1024.0)) >= 1.0)
{
sprintf(dest,"%0.2fGB",(m_size/1024.0)/1024.0);
}
else if((m_size / 1024.0) >= 1.0)
{
sprintf(dest,"%0.2fMB",(m_size/1024));
}
else
{
sprintf(dest,"%0.2fKB",m_size);
} return dest;
}

总结:

1、关于 struct statfs 结构体信息參考:http://blog.csdn.net/u011641885/article/details/46919027

2、对于fileSystem_total_size 使用float 类型。是为了准确度更高。buysbox 中的 fdisk 源代码使用的是整型相除,约为4舍五入。

3、kscale 函数中 使用 unsigned long long 类型 是由于 m_block 与 m_byte 原本是long 型,相乘的结果超出了 long 类型的能够表示数据位。

linux 获取文件系统信息(磁盘信息)的更多相关文章

  1. C#获取本机磁盘信息

    照着书敲的.留作笔记吧. using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  2. C# 获取文件详细备注信息 (如图片、视频实际创建时间)

    在整理照片/视频时想根据实际拍摄时间重命名文件,但 System.IO.FileInfo 只能获取到文件的创建时间或最后写入时间,不符合要求,遂寻找解决方案 方案 1: System.Drawing ...

  3. fsck获取文件的block信息和位置信息

    原文链接:lxw的大数据田地 » hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations) 关键字:hdfs fsck.block.locations 在H ...

  4. LINUX获取文件信息

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  5. Unix/Linux获取进程的详细信息

    Linux的进程的信息都记录在/proc/<pid>/下面,其实常用的ps.top命令也是从这里读取信息的.常用的信息有: cmd(命令).cmdline(完整的命令行参数).envrio ...

  6. Linux(6)文件和磁盘管理

    文件和磁盘管理 1. 文件管理ls ls : 查看文件信息. 列出目录的内容 -a :显示指定目录下的所有文件, 包括以.开头的隐藏文件 -l :以列表方式显示文件的详细信息 -h :配合-l显示文件 ...

  7. Linux查看文件以及磁盘空间大小管理(转)

    (1)查看文件大小  查看当前文件夹下所有文件大小(包括子文件夹)    du -sh   # du -h15M     ./package16K     ./.fontconfig4.0K    . ...

  8. C#通过shell32获取文件详细备注信息

    1.从系统Window/System32文件夹中Copy出 Shell32.dll Com组件 将Shell32.dll文件引用到项目中,并设置“嵌入互操作类型”为false http://blog. ...

  9. linux 获取目录中详细信息 -rw-r--r--详解

    -rw-r–r– 1 root root 1313 Sep 3 14:59 test.log详解 查询目录中的内容命令 ls [选项] [文件或目录] 选项: -a 显示所有文件.包括隐藏文件 -l ...

随机推荐

  1. UML--用例图

    一.UML概述 1.UML的作用:a 把复杂的问题分解   b 实现了可视化     UML是由Rational公司创建的 2.UML是什么:是一种语言,有属于自己的标准表达规则,是一种分析设计语言, ...

  2. J2SE知识点摘记(三)

    1.         在java只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类.但在java中却允许多层继承. 2.         非内部Class只能被public或者defaul ...

  3. 让乌龟在提交cocos2d-x版本时自动去掉不需要的东东

    引擎版本:2.1.4 ide:vs2012 一般协作开发情况下,有意思无意将bin.obj等一些目录添加到版本管理中是很烦人的事儿,在VS中不断地编译程序集和提交将带来版本暴增问题.如果你用的是乌龟S ...

  4. Webbrowser中模拟连接点击(非鼠标模拟)

    Delphi uses mshtml, ActiveX; //初始加载网易主页 procedure TForm1.FormCreate(Sender: TObject); begin Webbrows ...

  5. c# xml操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xm ...

  6. Linux网桥

    linux网桥的功能 转发数据包 网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除.网桥对站点所处网段的了解是靠"自学习&q ...

  7. poj1484---判断保险丝是否烧断

    题目输入要求: 2 2 10 //设备数n  接下来的操作数m   保险丝能承受最大电流c5 //电器1的电流7 //2的电流1 //反转开关12 //反转开关2 思路:设置一个flag数组,记得每次 ...

  8. mininet 中图形化界面的安装

    just run a GUI in VM console window First, log in to the VM in its console window (i.e. type directl ...

  9. UI线程与worker线程

    也谈谈我对UI线程和worker线程的理解 UI线程又叫界面线程,能够响应操作系统的特定消息,包括界面消息.鼠标键盘消息.自定义消息等,是在普通的worker线程基础上加上消息循环来实现的,在这个消息 ...

  10. memset memcpy函数

    memset 函数 1.其头文件为: #include<memory> 或者#include<string> 2.原型    看清是对每个字节,不是其类型 void *mems ...