【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. 修改profile出错后的补救

    修改profile出错后的补救,谢天谢地export命令还能用 今天在鼓捣centOS的时候,一不小心把用户配置文件profile给改错啦.重启之后进不了图形界面,终端里的命令也有大半不好使啦. 我试 ...

  2. heapq模块

    该模块提供了堆排序算法的实现.堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点. 创建堆 heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.hea ...

  3. Angular学习笔记 ——input 标签上的【name属性】和【ngModelOptions属性】

    利用“@angular/forms" 创建<form>表单的时候,系统默认会创建一个”FormGroup"的对象. 使用带有“ngModel"的”<in ...

  4. Django-- CRM1客户建表与装饰器

    一.CRM项目(1) 引入三个表:用户表,客户表,校区表,班级表,梳理逻辑关系并迁移数据库,生成表. 使用admin插入数据,admin是Django提供的web形式的后台数据管理页面,它是和用户认证 ...

  5. django 请求生命周期

    详细例子:

  6. 【Linux】linux压缩和解压缩命令大全

    tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...

  7. Maven基本使用汇总

    1. 基础问题 0.eclipse工程转maven工程:工程->右键->configure->convert to maven project 1.pom.xml总是在项目的根目录. ...

  8. vue3.0学习笔记(二)

    一.选择合适的ide 推荐使用vs code编辑器,界面清晰.使用方便,控制台功能很好用.webstorm也可以,看个人喜好. 二.ui框架选择 目前,pc端一般是选择element ui(饿了么), ...

  9. gitk更改主题设置打不开

    ➜ project git:(master) gitk Error in startup script: unknown color name "lime" (processing ...

  10. 命名空间namespace、smarty使用(视图分离,MVC)、smarty模板语法、smarty缓存、MVC模式

    一.命名空间:namespace 命名空间 可以理解为逻辑上的使用,为了防止重名 namespace :关键字 加载:require_once();//加载一次 include_once() 申明命名 ...