statvfs, fstatvfs - 獲取檔案系統統計資訊
#include <sys/statvfs.h>int statvfs(const char *path, struct statvfs *buf); int fstatvfs(int fd, struct statvfs *buf);
The function statvfs() returns information about a mounted file system. path is the pathname of any file within the mounted filesystem. buf is a pointer to a statvfsstructure defined approximately as follows:
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 */ }; |
Here the types fsblkcnt_t and fsfilcnt_t are defined in <sys/types.h>. Both used to beunsigned long.
The field f_flag is a bit mask (of mount flags, see mount(8)). Bits defined by POSIX are
標籤 | 描述 |
---|---|
ST_RDONLY | Read-only file system. |
ST_NOSUID | Set-user-ID/set-group-ID bits are ignored by exec(2). |
它是不確定的返回結構的所有成員是否對所有檔案系統有意義的值。
fstatvfs() 返回有關由描述符fd指定開啟的檔案相同的資訊。
On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
Error Code | 描述 |
---|---|
EACCES | (statvfs()) Search permission is denied for a component of the path prefix of path. (See also path_resolution(2).) |
EBADF | (fstatvfs()) fd is not a valid open file descriptor. |
EFAULT | Buf or path points to an invalid address. |
EINTR | This call was interrupted by a signal. |
EIO | An I/O error occurred while reading from the file system. |
ELOOP | (statvfs()) Too many symbolic links were encountered in translating path. |
ENAMETOOLONG | (statvfs()) path is too long. |
ENOENT | (statvfs()) The file referred to by path does not exist. |
ENOMEM | Insufficient kernel memory was available. |
ENOSYS | The file system does not support this call. |
ENOTDIR | (statvfs()) A component of the path prefix of path is not a directory. |
EOVERFLOW | Some values were too large to be represented in the returned struct. |
Solaris, Irix, POSIX.1-2001
The Linux kernel has system calls statfs() and fstatfs() to support this library call.
The current glibc implementation of
pathconf(path, _PC_REC_XFER_ALIGN); pathconf(path, _PC_ALLOC_SIZE_MIN); pathconf(path, _PC_REC_MIN_XFER_SIZE); |
uses the f_frsize, f_frsize, and f_bsize fields of the return value of statvfs(path,buf).