STATFS(2) — SYSTEM CALLS
NAME
statfs, fstatfs − get file system statistics
SYNOPSIS
#include <sys/vfs.h>
int statfs(path, buf)
char ∗path;
struct statfs ∗buf;
int fstatfs(fd, buf)
int fd;
struct statfs ∗buf;
DESCRIPTION
statfs() returns information about a mounted file system. path is the path name of any file within the mounted file system. buf is a pointer to a statfs() structure defined as follows:
typedef struct {
longval[2];
} fsid_t;
struct statfs {
longf_type; /∗ type of info, zero for now ∗/
longf_bsize;/∗ fundamental ∗/
longf_blocks;/∗ total blocks in file system ∗/
longf_bfree;/∗ free blocks ∗/
longf_bavail;/∗ free blocks available to non-super-user ∗/
longf_files;/∗ total file nodes in file system ∗/
longf_ffree;/∗ free file nodes in fs ∗/
fsid_tf_fsid; /∗ file system id ∗/
longf_spare[7];/∗ spare for later ∗/
};
Fields that are undefined for a particular file system are set to −1. fstatfs() returns the same information about an open file referenced by descriptor fd.
RETURN VALUES
statfs() and fstatfs() return:
0 on success.
−1 on failure and set errno to indicate the error.
ERRORS
statfs() fails if one or more of the following are true:
EACCES Search permission is denied for a component of the path prefix of path.
EFAULT buf or path points to an invalid address.
EIO An I/O error occurred while reading from or writing to the file system.
ELOOP Too many symbolic links were encountered in translating path.
ENAMETOOLONG The length of the path argument exceeds {PATH_MAX}.
A pathname component is longer than {NAME_MAX} (see sysconf(2V)) while {_POSIX_NO_TRUNC} is in effect (see pathconf(2V)).
ENOENT The file referred to by path does not exist.
ENOTDIR A component of the path prefix of path is not a directory.
fstatfs() fails if one or more of the following are true:
EBADF fd is not a valid open file descriptor.
EFAULT buf points to an invalid address.
EIO An I/O error occurred while reading from the file system.
CAVEAT
In Sun Online: DiskSuite, the f_blocks, f_bfree, and f_bavail members are not allowed to exceed values corresponding to two Gbytes. This is to prevent integer overflow in older programs that have not been written with larger file systems in mind. However, the correct size information is returned in the f_spare array. The wrapper functions in /usr/lib/libserver.a copy the correct size information into f_blocks, f_bfree, and f_bavail, so this trickery will be invisible to programs that are linked with -lserver.
BUGS
The NFS revision 2 protocol does not permit the number of free files to be provided to the client; thus, when statfs() or fstatfs() are done on a file on an NFS file system, f_files and f_ffree are always −1.
SEE ALSO
Sun Online: DiskSuite Administration Guide
Sun Release 4.1 — Last change: 19 July 1991