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> /* 或 <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 */
};

File system types:

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

广告


  

广告



广告