statvfs() - Unix,Linux系统调用
广告
名称
statvfs, fstatvfs - 获取文件系统统计信息
概要
#include <sys/statvfs.h>
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; /* file system block size */
unsigned long f_frsize; /* fragment size */
fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* # free blocks */
fsblkcnt_t f_bavail; /* # free blocks for non-root */
fsfilcnt_t f_files; /* # inodes */
fsfilcnt_t f_ffree; /* # free inodes */
fsfilcnt_t f_favail; /* # free inodes for non-root */
unsigned long f_fsid; /* file system ID */
unsigned long f_flag; /* mount flags */
unsigned long f_namemax; /* maximum filename length */
};
|
这里,类型fsblkcnt_t和fsfilcnt_t在<sys/types.h>中定义。两者都曾经是unsigned long。 字段f_flag是一个位掩码(挂载标志,参见mount(8))。POSIX定义的位是:
标签 | 描述 |
ST_RDONLY | 只读文件系统。 |
ST_NOSUID | exec(2)忽略设置用户ID/设置组ID位。 |
返回的结构的所有成员在所有文件系统上是否都有有意义的值是不确定的。
fstatvfs()返回有关由描述符fd引用的打开文件相同的 信息。
返回值
成功时,返回零。发生错误时,返回-1,并相应地设置errno。
错误
错误代码 | 描述 |
EACCES | (statvfs()) 对path路径前缀的组成部分拒绝搜索权限。(另见path_resolution(2)。) |
EBADF | (fstatvfs()) fd不是有效的打开文件描述符。 |
EFAULT |
Buf或path指向无效地址。 |
EINTR | 此调用被信号中断。 |
EIO | 从文件系统读取时发生I/O错误。 |
ELOOP | (statvfs()) 在转换path时遇到太多符号链接。 |
ENAMETOOLONG | (statvfs()) path太长。 |
ENOENT | (statvfs()) path引用的文件不存在。 |
ENOMEM | 可用内核内存不足。 |
ENOSYS | 文件系统不支持此调用。 |
ENOTDIR | (statvfs()) path路径前缀的组成部分不是目录。 |
EOVERFLOW | 某些值太大,无法在返回的结构中表示。 |
符合标准
Solaris, Irix, POSIX.1-2001
备注
Linux内核有系统调用statfs()和fstatfs()来支持此库调用。
当前glibc的实现
pathconf(path, _PC_REC_XFER_ALIGN);
pathconf(path, _PC_ALLOC_SIZE_MIN);
pathconf(path, _PC_REC_MIN_XFER_SIZE);
|
使用statvfs(path,buf)返回值的f_frsize、f_frsize和f_bsize字段。
参见
广告
|