【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. Kipmi0 占用CPU 100%

    查看当前正在运行的进程发现kipmi0进程占用率达到100% kipmi -% of the CPUs, %/% comes when the machine is idle? A second is ...

  2. 【经验总结】tcp_tw_recycle参数引发的故障

    tcp_tw_recycle参数引发的故障 By Eric 故障描述: 2010年9月7日,新上线的手机游戏论坛有部分地区用户反应登陆游戏时出现不能登陆或登陆超时等情况,观察用户同时在线数量开始下降情 ...

  3. Python3.5 控制台日志输出,区分标准输出与错误输出

    import logging import sys class ConsoleHandler(logging.Handler): terminator = '\n' def __init__(self ...

  4. Hibernate的工作流程以及三种状态(面试题)

    Hibernate的工作流程以及三种状态 部分转载自:http://www.cnblogs.com/fifiyong/p/6390699.html Hibernate的工作流程: 1. 读取并解析配置 ...

  5. C# 多线程之线程控制

    方案一: 调用线程控制方法.启动:Thread.Start();停止:Thread.Abort();暂停:Thread.Suspend();继续:Thread.Resume(); private vo ...

  6. Ubuntu 14.04上安装Riak

    一.安装riak   1. 安装包:riak_2.0.2-1_amd64.deb    路    径:~/software/riak_2.0.2-1_amd64.deb 2. 安装riak     $ ...

  7. webpack 的异步组件 生成commonchunks

    new webpack.optimize.CommonsChunkPlugin({ async: 'async-common', minChunks: function (module, count) ...

  8. windows下使用VM虚拟机安装linux

    转载地址:http://blog.csdn.net/u013142781/article/details/50529030 安装过程中发现与下面的顺序有点不同,遇到的问题是: 在选择中文进行安装时,一 ...

  9. vue-cli之脚手架

    一.创建VUE项目 npm install vue-cli -g vue init webpack myprject cd myproject npm run dev 补充: 组件:它是可扩展的htm ...

  10. flask之jinja2模板语言

    一.jinja2简单介绍 Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的 ...