statfs() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix实用参考
  Unix实用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于TP  

statfs() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

statfs, fstatfs - 获取文件系统统计信息

概要

#include <sys/vfs.h>    /* or <sys/statfs.h> */ 

int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);

描述

函数statfs() 返回有关已挂载文件系统的信息。path 是已挂载文件系统中任何文件的路径名。buf 是指向statfs 结构的指针,其定义大致如下:

struct statfs {
   long    f_type;     /* type of filesystem (see below) */
   long    f_bsize;    /* optimal transfer block size */
   long    f_blocks;   /* total data blocks in file system */
   long    f_bfree;    /* free blocks in fs */
   long    f_bavail;   /* free blocks avail to non-superuser */
   long    f_files;    /* total file nodes in file system */
   long    f_ffree;    /* free file nodes in fs */
   fsid_t  f_fsid;     /* file system id */
   long    f_namelen;  /* maximum length of filenames */
};

文件系统类型

   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

没有人知道f_fsid 应该包含什么内容(但请参见下文)。

对于特定文件系统未定义的字段设置为 0。fstatfs() 返回有关由描述符fd 引用的打开文件相同的信息。

返回值

成功时,返回零。出错时,返回 -1,并相应地设置errno

错误

错误代码描述
EACCES (statfs()) 对path 的路径前缀的组成部分拒绝搜索权限。(另请参见path_resolution(2)。)
EBADF (fstatfs()) fd 不是有效的打开文件描述符。
EFAULT bufpath 指向无效地址。
EINTR 此调用被信号中断。
EIO 从文件系统读取时发生 I/O 错误。
ELOOP (statfs()) 在转换path 时遇到太多符号链接。
ENAMETOOLONG (statfs()) path 太长。
ENOENT (statfs()) path 引用的文件不存在。
ENOMEM 可用内核内存不足。
ENOSYS 文件系统不支持此调用。
ENOTDIR (statfs()) path 的路径前缀的组成部分不是目录。
EOVERFLOW 某些值太大,无法在返回的结构中表示。

符合标准

Linux statfs() 的灵感来自 4.4BSD 版本(但它们不使用相同的结构)。

注释

内核具有系统调用statfs()、fstatfs()、statfs64() 和fstatfs64() 来支持此库调用。

某些系统只有 <sys/vfs.h>,其他系统也具有 <sys/statfs.h>,前者包含后者。因此,包含前者似乎是最佳选择。

LSB 已弃用库调用statfs() 和fstatfs(),并建议我们改用statvfs() 和fstatvfs()。

f_fsid 字段

Solaris、Irix 和 POSIX 具有返回struct statvfs(在<sys/statvfs.h> 中定义)的系统调用statvfs(2),其中包含unsigned long f_fsid。Linux、SunOS、HP-UX、4.4BSD 具有返回struct statfs(在<sys/vfs.h> 中定义)的系统调用statfs(),其中包含fsid_t f_fsid,其中fsid_t 定义为struct { int val[2]; }。FreeBSD 也一样,只是它使用包含文件<sys/mount.h>

总体思路是f_fsid 包含一些随机内容,以便对 (f_fsid,ino) 唯一地确定一个文件。某些操作系统使用(变化的)设备号,或者设备号与文件系统类型组合在一起。几个操作系统仅将f_fsid 字段的输出限制为超级用户(并将其对非特权用户清零),因为此字段在 NFS 导出时用于文件系统的文件句柄,而将其输出是一个安全问题。

在某些操作系统下,fsid 可以用作sysfs() 系统调用的第二个参数。

参见



previous next Printer Friendly

广告


  

广告



广告