The useage of statfs function

#include
#include
#include
#include

#define Gsize (1024.00*1024.00*1024.00)
#define Msize (1024.00*1024.00)

#ifndef EXT2_SUPER_MAGIC
#define EXT2_SUPER_MAGIC 0xef53
#endif

int main()
{
        long long blocks,bfree;
        struct statfs fs;
        if(statfs("/",&fs)<0)
        {
                perror("statfs");
                exit(0);
        }

      printf("f_type=%x/n",fs.f_type);      /* type of filesystem (see below) */
      printf("f_bsize=%ld/n",fs.f_bsize);    /* optimal transfer block size */
      printf("f_blocks=%ld/n",fs.f_blocks);   /* total data blocks in file system */
      printf("f_bfree=%ld/n",fs.f_bfree);    /* free blocks in fs */
      printf("f_bavail=%ld/n",fs.f_bavail);   /* free blocks avail to non-superuser */
      printf("f_files=%ld/n",fs.f_files);    /* total file nodes in file system */
      printf("f_ffree=%ld/n",fs.f_ffree);    /* free file nodes in fs */
      printf("f_fsid=%d/n",fs.f_fsid);     /* file system id */
      printf("f_namelen=%ld/n",fs.f_namelen);  /* maximum length of filenames */

        blocks=fs.f_blocks;
        bfree=fs.f_bavail;
//      printf(" %lld/n",blocks);
     printf("/n/n");
        if(fs.f_type==EXT2_SUPER_MAGIC)
        {
                printf("Total size of / is %f G/n",blocks*fs.f_bsize/Gsize);
                printf("Free size of / is %f G/n",bfree*fs.f_bsize/Gsize);
        }
}
//

 

 

 

 

 

功能描述:  
查询文件系统相关的信息。
   
用法:  
#include     /* 或者 */

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:信息溢出


文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/200896/139506.html

你可能感兴趣的:(Linux)