STATVFS - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
statvfs(),fstatvfs()Thread safetyMT-Safe

另外参见

statfs(2)

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

遵循规范

POSIX.1-2001,POSIX.1-2008。

在POSIX.1中仅指定f_flag字段的ST_NOSUID和ST_RDONLY标志。为了获得其余标志的定义,必须定义_GNU_SOURCE。

语法

#包括

int statvfs(const char * path,struct statvfs * buf);
int fstatvfs(int fd,struct statvfs * buf);

说明

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

struct statvfs {
    unsigned long  f_bsize;    /* Filesystem block size */
    unsigned long  f_frsize;   /* Fragment size */
    fsblkcnt_t     f_blocks;   /* Size of fs in f_frsize units */
    fsblkcnt_t     f_bfree;    /* Number of free blocks */
    fsblkcnt_t     f_bavail;   /* Number of free blocks for
                                  unprivileged users */
    fsfilcnt_t     f_files;    /* Number of inodes */
    fsfilcnt_t     f_ffree;    /* Number of free inodes */
    fsfilcnt_t     f_favail;   /* Number of free inodes for
                                  unprivileged users */
    unsigned long  f_fsid;     /* Filesystem ID */
    unsigned long  f_flag;     /* Mount flags */
    unsigned long  f_namemax;  /* Maximum filename length */
};

在这里,类型fsblkcnt_t和fsfilcnt_t在中定义。两者过去都是无符号的。

字段f_flag是位掩码,指示安装此文件系统时采用的各种选项。它包含零个或多个以下标志:

ST_MANDLOCK
在文件系统上允许强制锁定(请参阅fcntl(2))。
ST_NOATIME
不更新访问时间;参见mount(2)。
ST_NODEV
禁止访问此文件系统上的设备专用文件。
ST_NODIRATIME
不更新目录访问时间;参见mount(2)。
ST_NOEXEC
在此文件系统上不允许执行程序。
ST_NOSUID
exec(3)将忽略此文件系统上的可执行文件的set-user-ID和set-group-ID位
ST_RDONLY
该文件系统是只读安装的。
ST_RELATIME
相对于mtime / ctime更新atime;参见mount(2)。
ST_SYNCHRONOUS
写入立即同步到文件系统(请参阅open(2)中的O_SYNC描述)。

还不确定返回的结构的所有成员在所有文件系统上是否都具有有意义的值。

fstatvfs()返回有关描述符fd引用的打开文件的相同信息。

备注

Linux内核具有系统调用statfs(2)和fstatfs(2)来支持此库调用。

在2.13之前的glibc版本中,statvfs()通过扫描/ proc / mounts中显示的安装选项来填充f_flag字段的位。但是,从Linux 2.6.36开始,底层的statfs(2)系统调用通过f_flags字段提供了必要的信息,并且由于glibc版本2.13,statvfs()函数将使用该字段中的信息,而不是扫描/ proc / mounts 。

的glibc实现

pathconf(path, _PC_REC_XFER_ALIGN);
pathconf(path, _PC_ALLOC_SIZE_MIN);
pathconf(path, _PC_REC_MIN_XFER_SIZE);

分别使用通过带参数路径的statvfs()调用返回的f_frsize,f_frsize和f_bsize字段。

名称

statvfs,fstatvfs-获取文件系统统计信息

错误说明

EACCES
(statvfs())拒绝对path的路径前缀的一部分进行搜索。 (另请参见path_resolution(7)。)
EBADF
(fstatvfs())fd不是有效的打开文件描述符。
EFAULT
Buf或路径指向无效的地址。
EINTR
该呼叫被信号打断;参见signal(7)。
EIO
从文件系统读取时发生I / O错误。
ELOOP
(statvfs())在翻译路径中遇到太多符号链接。
ENAMETOOLONG
(statvfs())路径太长。
ENOENT
(statvfs())路径引用的文件不存在。
ENOMEM
内核内存不足。
ENOSYS
文件系统不支持此调用。
ENOTDIR
(statvfs())path的路径前缀的组成部分不是目录。
EOVERFLOW
一些值太大而无法在返回的结构中表示。
日期:2019-08-20 18:00:23 来源:oir作者:oir