zoukankan      html  css  js  c++  java
  • fstatfs/statfs详解

    【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;
    }

  • 相关阅读:
    zabbix 添加 微信、邮件 媒介详解
    zabbix使用之常用功能使用心得
    Nginx1.8源码包编译安装
    httpd启动显示Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName'
    apache-httpd2.4编译安装
    apache-httpd2.2编译安装
    MYSQL5.7源码包编译安装
    MYSQL常见安装错误集:[ERROR] --initialize specified but the data directory has files in it. Abort
    MYSQL启用数据库错误:ERROR 2002 (HY000)
    编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)
  • 原文地址:https://www.cnblogs.com/RodYang/p/3436760.html
Copyright © 2011-2022 走看看