mirror of https://github.com/mkerrisk/man-pages
244 lines
6.6 KiB
Groff
244 lines
6.6 KiB
Groff
.\" Copyright (C) 2003 Andries Brouwer (aeb@cwi.nl)
|
|
.\"
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
.\" have taken the same level of care in the production of this manual,
|
|
.\" which is licensed free of charge, as they might when working
|
|
.\" professionally.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\"
|
|
.\" Modified 2003-08-17 by Walter Harms
|
|
.\" Modified 2004-06-23 by Michael Kerrisk <mtk-manpages@gmx.net>
|
|
.\"
|
|
.TH STATFS 2 2004-06-23 "Linux 2.6.7" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
statfs, fstatfs \- get file system statistics
|
|
.SH SYNOPSIS
|
|
.BR "#include <sys/vfs.h> " "/* or <sys/statfs.h> */"
|
|
.sp
|
|
.BI "int statfs(const char *" path ", struct statfs *" buf );
|
|
.br
|
|
.BI "int fstatfs(int " fd ", struct statfs *" buf );
|
|
.SH DESCRIPTION
|
|
The function
|
|
.B statfs
|
|
returns information about a mounted file system.
|
|
.I path
|
|
is the path name of any file within the mounted filesystem.
|
|
.I buf
|
|
is a pointer to a
|
|
.I statfs
|
|
structure defined approximately as follows:
|
|
|
|
.RS
|
|
.nf
|
|
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
|
|
.fi
|
|
.RE
|
|
.PP
|
|
Nobody knows what
|
|
.I f_fsid
|
|
is supposed to contain (but see below).
|
|
.PP
|
|
Fields that are undefined for a particular file system are set to 0.
|
|
.B fstatfs
|
|
returns the same information about an open file referenced by descriptor
|
|
.IR fd .
|
|
.SH "RETURN VALUE"
|
|
On success, zero is returned. On error, \-1 is returned, and
|
|
.I errno
|
|
is set appropriately.
|
|
.SH ERRORS
|
|
.TP
|
|
.B EACCES
|
|
(statfs)
|
|
Search permission is denied for a component of the path prefix of
|
|
.IR path .
|
|
(See also
|
|
.BR path_resolution (2).)
|
|
.TP
|
|
.B EBADF
|
|
(fstatfs)
|
|
.I fd
|
|
is not a valid open file descriptor.
|
|
.TP
|
|
.B EFAULT
|
|
.I buf
|
|
or
|
|
.I path
|
|
points to an invalid address.
|
|
.TP
|
|
.B EINTR
|
|
This call was interrupted by a signal.
|
|
.TP
|
|
.B EIO
|
|
An I/O error occurred while reading from the file system.
|
|
.TP
|
|
.B ELOOP
|
|
(statfs)
|
|
Too many symbolic links were encountered in translating
|
|
.IR path .
|
|
.TP
|
|
.B ENAMETOOLONG
|
|
(statfs)
|
|
.I path
|
|
is too long.
|
|
.TP
|
|
.B ENOENT
|
|
(statfs)
|
|
The file referred to by
|
|
.I path
|
|
does not exist.
|
|
.TP
|
|
.B ENOMEM
|
|
Insufficient kernel memory was available.
|
|
.TP
|
|
.B ENOSYS
|
|
The file system does not support this call.
|
|
.TP
|
|
.B ENOTDIR
|
|
(statfs)
|
|
A component of the path prefix of
|
|
.I path
|
|
is not a directory.
|
|
.TP
|
|
.B EOVERFLOW
|
|
Some values were too large to be represented in the returned struct.
|
|
.PP
|
|
.SH "CONFORMING TO"
|
|
The Linux
|
|
.B statfs
|
|
was inspired by the 4.4BSD one
|
|
(but they do not use the same structure).
|
|
.SH "NOTES ON f_fsid"
|
|
Solaris, Irix and POSIX have a system call
|
|
.BR statvfs (2)
|
|
that returns a
|
|
.B "struct statvfs"
|
|
(defined in
|
|
.IR "<sys/statvfs.h>" )
|
|
containing an
|
|
.B "unsigned long"
|
|
.IR f_fsid .
|
|
Linux, SunOS, HPUX, 4.4BSD have a system call
|
|
.I statfs
|
|
that returns a
|
|
.B "struct statfs"
|
|
(defined in
|
|
.IR "<sys/vfs.h>" )
|
|
containing a
|
|
.B fsid_t
|
|
.IR f_fsid ,
|
|
where
|
|
.I fsid_t
|
|
is defined as
|
|
.BR "struct { int val[2]; }" .
|
|
The same holds for FreeBSD, except that it uses the include file
|
|
.IR "<sys/mount.h>" .
|
|
|
|
The general idea is that
|
|
.I f_fsid
|
|
contains some random stuff such that the pair
|
|
.RI ( f_fsid , ino )
|
|
uniquely determines a file.
|
|
Some OSes use (a variation on) the device number, or the device number
|
|
combined with the filesystem type.
|
|
Several OSes restrict giving out the
|
|
.I f_fsid
|
|
field to the superuser only (and zero it for nonprivileged users),
|
|
because this field is used in the filehandle of the filesystem
|
|
when NFS-exported, and giving it out is a security concern.
|
|
.LP
|
|
Under some OSes the
|
|
.I fsid
|
|
can be used as second parameter to the
|
|
.I sysfs()
|
|
system call.
|
|
.SH NOTES
|
|
The kernel has system calls statfs, fstatfs, statfs64, fstatfs64
|
|
to support this library call.
|
|
|
|
Some systems only have <sys/vfs.h>, other systems also have
|
|
<sys/statfs.h>, where the former includes the latter. So it seems
|
|
including the former is the best choice.
|
|
|
|
LSB has deprecated the library calls
|
|
.I [f]statfs()
|
|
and tells us to use
|
|
.I [f]statvfs()
|
|
instead.
|
|
.SH "SEE ALSO"
|
|
.BR path_resolution (2),
|
|
.BR stat (2),
|
|
.BR statvfs (2)
|