【fstatfs/statfs系统调用】   
    
功能描述:   
查询文件系统相关的信息。 
    
用法:   
#include <sys/vfs.h>    /* 或者 <sys/statfs.h> */

int statfs(const char *path, struct statfs *buf); 
int fstatfs(int fd, struct statfs *buf); 
  
  参数:   
path: 位于需要查询信息的文件系统的文件路径名。     
fd: 位于需要查询信息的文件系统的文件描述词。 
buf:以下结构体的指针变量,用于储存文件系统相关的信息

struct statfs { 
    long    f_type;     /* 文件系统类型  */ 
   long    f_bsize;    /* 经过优化的传输块大小  */ 
   long    f_blocks;   /* 文件系统数据块总数 */ 
   long    f_bfree;    /* 可用块数 */ 
     long    f_bavail;   /* 非超级用户可获取的块数 */ 
   long    f_files;    /* 文件结点总数 */ 
   long    f_ffree;    /* 可用文件结点数 */ 
   fsid_t  f_fsid;     /* 文件系统标识 */ 
   long    f_namelen;  /* 文件名的最大长度 */ 
};

相关的文件系统类型有: 
      ADFS_SUPER_MAGIC      0xadf5 
      AFFS_SUPER_MAGIC      0xADFF 
      BEFS_SUPER_MAGIC      0x42465331 
   BFS_MAGIC             0x1BADFACE 
   CIFS_MAGIC_NUMBER     0xFF534D42 
   CODA_SUPER_MAGIC      0x73757245 
      COH_SUPER_MAGIC       0x012FF7B7 
   CRAMFS_MAGIC          0x28cd3d45 
      DEVFS_SUPER_MAGIC     0x1373 
      EFS_SUPER_MAGIC       0x00414A53 
   EXT_SUPER_MAGIC       0x137D 
   EXT2_OLD_SUPER_MAGIC  0xEF51 
   EXT2_SUPER_MAGIC      0xEF53 
   EXT3_SUPER_MAGIC      0xEF53 
   HFS_SUPER_MAGIC       0x4244 
   HPFS_SUPER_MAGIC      0xF995E849 
   HUGETLBFS_MAGIC       0x958458f6 
   ISOFS_SUPER_MAGIC     0x9660 
   JFFS2_SUPER_MAGIC     0x72b6 
   JFS_SUPER_MAGIC       0x3153464a 
      MINIX_SUPER_MAGIC     0x137F /* orig. minix */ 
   MINIX_SUPER_MAGIC2    0x138F /* 30 char minix */ 
   MINIX2_SUPER_MAGIC    0x2468 /* minix V2 */ 
      MINIX2_SUPER_MAGIC2   0x2478 /* minix V2, 30 char names */ 
   MSDOS_SUPER_MAGIC     0x4d44 
   NCP_SUPER_MAGIC       0x564c 
   NFS_SUPER_MAGIC       0x6969 
   NTFS_SB_MAGIC         0x5346544e 
   OPENPROM_SUPER_MAGIC  0x9fa1 
     PROC_SUPER_MAGIC      0x9fa0 
   QNX4_SUPER_MAGIC      0x002f 
      REISERFS_SUPER_MAGIC  0x52654973 
   ROMFS_MAGIC           0x7275 
   SMB_SUPER_MAGIC       0x517B 
   SYSV2_SUPER_MAGIC     0x012FF7B6 
   SYSV4_SUPER_MAGIC     0x012FF7B5 
      TMPFS_MAGIC           0x01021994 
   UDF_SUPER_MAGIC       0x15013346 
   UFS_MAGIC             0x00011954 
    USBDEVICE_SUPER_MAGIC 0x9fa2 
   VXFS_SUPER_MAGIC      0xa501FCF5 
   XENIX_SUPER_MAGIC     0x012FF7B4 
   XFS_SUPER_MAGIC       0x58465342 
   _XIAFS_SUPER_MAGIC    0x012FD16D 
  
    
返回说明:   
成功执行时,返回0。失败返回-1,errno被设为以下的某个值   
  
EACCES: (statfs())文件或路径名中包含的目录不可访问 
EBADF : (fstatfs()) 文件描述词无效 
EFAULT: 内存地址无效 
EINTR : 操作由信号中断 
EIO    : 读写出错 
ELOOP : (statfs())解释路径名过程中存在太多的符号连接 
ENAMETOOLONG:(statfs()) 路径名太长 
ENOENT:(statfs()) 文件不存在 
ENOMEM: 核心内存不足 
ENOSYS: 文件系统不支持调用 
ENOTDIR:(statfs())路径名中当作目录的组件并非目录 
EOVERFLOW:信息溢出

一个简单的例子:

#include <sys/vfs.h>
#include <stdio.h>

int main()
{
    struct statfs diskInfo;
    statfs("/",&diskInfo);
    unsigned long long blocksize = diskInfo.f_bsize;// 每个block里面包含的字节数
    unsigned long long totalsize = blocksize * diskInfo.f_blocks;//总的字节数
    printf("TOTAL_SIZE == %lu MB/n",totalsize>>20); // 1024*1024 =1MB  换算成MB单位

unsigned long long freeDisk = diskInfo.f_bfree*blocksize; //再计算下剩余的空间大小
    printf("DISK_FREE == %ld MB/n",freeDisk>>20);

return 0;
}

fstatfs/statfs详解的更多相关文章

  1. 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

    http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...

  2. 节点地址的函数list_entry()原理详解

    本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...

  3. Linux就业技术指导(五):Linux运维核心管理命令详解

    一,Linux核心进程管理命令 1.1 ps:查看进程 1.1.1 命令解释 功能说明 ps命令用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片.如果想要动态地显示进程,就需要使 ...

  4. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  5. 云计算:Linux运维核心管理命令详解

    云计算:Linux运维核心管理命令详解 想做好运维工作,人先要学会勤快: 居安而思危,勤记而补拙,方可不断提高: 别人资料不论你用着再如何爽那也是别人的: 自己总结东西是你自身特有的一种思想与理念的展 ...

  6. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  7. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  8. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  9. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

随机推荐

  1. jQuery中ready和load的区别

    <span style="white-space:pre">        </span>//document ready $(document).read ...

  2. Hadoop TaskScheduler源码分析

    TaskScheduler是MapReduce中的任务调度器.在MapReduce中,JobTracker接收JobClient提交的Job,将它们按InputFormat的划分以及其他相关配置,生成 ...

  3. Sqoop Import HDFS

    Sqoop import应用场景——密码访问 注:测试用表为本地数据库中的表 1.明码访问 sqoop list-databases \ --connect jdbc:mysql://202.193. ...

  4. Access 将SQL查询结果强制转换为某种类型

    每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(expression ...

  5. java与模式读后总结

    一 老规则边看边写书上的代码,磨磨蹭蹭三个多星期终于把一本1000+的java与模式看完了. 于是,在这里贴上自己对每个模式的思考和总结,其实这个东西在我边看边写的时候已经写了一大半,博文再写一次算是 ...

  6. linux安装jdk7步骤

    linux安装jdk7步骤: 1.首先使用命令查看linux系统版本号: lsb_release -a 2.下载对应的jdk版本,笔者使用的是jdk-7u79-linux-x64.tar.gz: 3. ...

  7. IDEA集成tomcat启动时控制台打印中文乱码

    转载:https://blog.csdn.net/nan_cheung/article/details/79337273 idea启动tomcat控制台出现乱码,每个人可能引发该问题的原因不同,可以就 ...

  8. hibernate课程 初探单表映射2-1 hibernate进阶 本章简介

    本章简介,主要讲5大块的内容 1 hibernate.cfg.xml的配置 2 session 的简介 3 transaction的简介 4 session的详解 5 对象关系映射常用配置

  9. JS 获取 今日、昨日、本周、本月、本季度、本年、上月、上周、上季度、去年

    /** * 日期范围工具类 */ var dateRangeUtil = (function () { /*** * 获得当前时间 */ this.getCurrentDate = function ...

  10. Eucalyptus-利用镜像启动一个Windows Server 2008r2实例

    1.前言 使用kvm制作Eucalyptus镜像(Windows Server 2008r2为例)——http://www.cnblogs.com/gis-luq/p/3990792.html 上一篇 ...