fstatvfs(2)




NAME

     statvfs, fstatvfs - get file system information


SYNOPSIS

     #include <sys/types.h>
     #include <sys/statvfs.h>

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

     int fstatvfs(int fildes, struct statvfs *buf);


DESCRIPTION

     The  statvfs()  function  returns  a  "generic   superblock"
     describing a file system; it can be used to acquire informa-
     tion about mounted  file systems.  The  buf  argument  is  a
     pointer  to  a structure (described below) that is filled by
     the function.

     The path argument should name a file that  resides  on  that
     file  system. The file system type is known to the operating
     system. Read, write, or execute  permission  for  the  named
     file is not required, but all directories listed in the path
     name leading to the file must be searchable.

     The statvfs structure pointed to by buf includes the follow-
     ing members:

     u_long      f_bsize;             /* preferred file system block size */
     u_long      f_frsize;            /* fundamental filesystem block
                                         (size if supported) */
     fsblkcnt_t  f_blocks;            /* total # of blocks on file system
                                         in units of f_frsize */
     fsblkcnt_t  f_bfree;             /* total # of free blocks */
     fsblkcnt_t  f_bavail;            /* # of free blocks avail to
                                         non-super-user */
     fsfilcnt_t  f_files;             /* total # of file nodes (inodes) */
     fsfilcnt_t  f_ffree;             /* total # of free file nodes */
     fsfilcnt_t  f_favail;            /* # of inodes avail to
                                         non-super-user*/
     u_long      f_fsid;              /* file system id (dev for now) */
     char        f_basetype[FSTYPSZ]; /* target fs type name,
                                         null-terminated */
     u_long      f_flag;              /* bit mask of flags */
     u_long      f_namemax;           /* maximum file name length */
     char        f_fstr[32];          /* file system specific string */
     u_long      f_filler[16];        /* reserved for future expansion */

     The f_basetype member contains a null-terminated FSType name
     of the mounted target.

     The following values can be returned in the f_flag field:

     ST_RDONLY    0x01    /* read-only file system */
     ST_NOSUID    0x02    /* does not support setuid/setgid semantics */
     ST_NOTRUNC   0x04    /* does not truncate file names longer than
                             NAME_MAX */

     The fstatvfs() function is similar to statvfs(), except that
     the file named by path in statvfs() is instead identified by
     an open file descriptor fildes obtained  from  a  successful
     open(2),  creat(2),  dup(2),  fcntl(2),  or pipe(2) function
     call.


RETURN VALUES

     Upon successful completion, 0 is returned. Otherwise, -1  is
     returned and errno is set to indicate the error.


ERRORS

     The statvfs() and fstatvfs() functions will fail if:

     EOVERFLOW
           One of the values to be returned cannot be represented
           correctly in the structure pointed to by buf.

     The statvfs() function will fail if:

     EACCES
           Search permission is denied on a component of the path
           prefix.

     EFAULT
           The path or buf argument points to an illegal address.

     EINTR A signal  was  caught  during  the  execution  of  the
           statvfs() function.

     EIO   An I/O error occurred while reading the file system.

     ELOOP Too many symbolic links were encountered in  translat-
           ing path.

     ENAMETOOLONG
           The length of a path component exceeds NAME_MAX  char-
           acters,  or  the  length  of path The exceeds PATH_MAX
           characters.

     ENOENT
           Either a component of the  path  prefix  or  the  file
           referred to by path does not exist.

     ENOLINK
           The path argument points to a remote machine  and  the
           link to that machine is no longer active.

     ENOTDIR
           A component of the path prefix of path is not a direc-
           tory.

     The fstatvfs() function will fail if:

     EBADF The fildes argument is not an open file descriptor.

     EFAULT
           The buf argument points to an illegal address.

     EINTR A signal  was  caught  during  the  execution  of  the
           fstatvfs() function.

     EIO   An I/O error occurred while reading the file system.


USAGE

     The statvfs() and  fstatvfs()  functions  have  transitional
     interfaces for 64-bit file offsets.  See lf64(5).

     When a UFS file system is mounted with logging enabled, file
     system  transactions  that  free blocks from files might not
     actually add those freed blocks to the  file  system's  free
     list  until some unspecified time in the future. In particu-
     lar, the  value  of  the  f_bfree,  f_bavail,  f_ffree,  and
     f_favail  members of the statvfs structure returned by these
     calls might not reflect blocks recently freed on the  under-
     lying  file  system. This behavior improves file system per-
     formance but does not conform  to  the  POSIX,  Single  UNIX
     Specification, SPARC Conformance Definition, System V Appli-
     cation Binary Interface, System V Interface Definition,  and
     X/Open Portability Guide Standards, which require that freed
     space be available immediately. To enable standards  confor-
     mance  regarding file deletions or to address the problem of
     not being able to grow files on a relatively full  UFS  file
     system  even after files have been deleted, disable UFS log-
     ging (see mount_ufs(1M).


SEE ALSO

     mount_ufs(1M),   chmod(2),   chown(2),   creat(2),   dup(2),
     fcntl(2),  link(2),  mknod(2),  open(2),  pipe(2),  read(2),
     time(2), unlink(2), utime(2), write(2), lf64(5)


BUGS

     The values returned for f_files, f_ffree, and  f_favail  may
     not be valid for NFS mounted file systems.


Man(1) output converted with man2html