NOMBRE
statfs, fstatfs − obtiene estadísticas del sistema de ficheros
SINOPSIS
#include <sys/vfs.h>
int
statfs(const char *path, struct statfs
*buf);
int fstatfs(int fd, struct statfs
*buf);
DESCRIPCIÓN
statfs devuelve información de un sistema de ficheros montado. path el el camino de cualquier fichero en el sistema de ficheros montado. buf es un puntero a una estructura statfs definida como sigue:
struct statfs {
long f_type; /* tipo sistema ficheros (ver bajo) */
long f_bsize; /* tamaño óptimo de bloque
de transferencia */
long f_blocks; /* total de bloques de datos en el sistema
de ficheros */
long f_bfree; /* bloques libres en el sf */
long f_bavail; /* bloques libres disponibles para
no-superusuarios */
long f_files; /* total de nodos de ficheros en el sf */
long f_ffree; /* nodos de ficheros libres en el sf */
fsid_t f_fsid; /* id del sistema de ficheros */
long f_namelen; /* longitud máxima de nombre de
ficheros */
long f_spare[6]; /* de sobra, para más tarde */
};
Tipos de sistema de ficheros:
linux/affs_fs.h:
AFFS_SUPER_MAGIC 0xADFF
linux/efs_fs.h:
EFS_SUPER_MAGIC 0x00414A53
linux/ext_fs.h:
EXT_SUPER_MAGIC 0x137D
linux/ext2_fs.h:
EXT2_OLD_SUPER_MAGIC 0xEF51
EXT2_SUPER_MAGIC 0xEF53
linux/hpfs_fs.h:
HPFS_SUPER_MAGIC 0xF995E849
linux/iso_fs.h:
ISOFS_SUPER_MAGIC 0x9660
linux/minix_fs.h:
MINIX_SUPER_MAGIC 0x137F /* minix orig.*/
MINIX_SUPER_MAGIC2 0x138F /* minix 30 carac.*/
MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */
MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, nombres 30 carac. */
linux/msdos_fs.h:
MSDOS_SUPER_MAGIC 0x4d44
linux/ncp_fs.h:
NCP_SUPER_MAGIC 0x564c
linux/nfs_fs.h:
NFS_SUPER_MAGIC 0x6969
linux/proc_fs.h:
PROC_SUPER_MAGIC 0x9fa0
linux/smb_fs.h:
SMB_SUPER_MAGIC 0x517B
linux/sysv_fs.h:
XENIX_SUPER_MAGIC 0x012FF7B4
SYSV4_SUPER_MAGIC 0x012FF7B5
SYSV2_SUPER_MAGIC 0x012FF7B6
COH_SUPER_MAGIC 0x012FF7B7
linux/ufs_fs.h:
UFS_MAGIC 0x00011954
linux/xfs_fs.h:
XFS_SUPER_MAGIC 0x58465342
linux/xia_fs.h:
_XIAFS_SUPER_MAGIC 0x012FD16D
Nadie sabe lo que f_fsid se supone que contiene (vea más abajo).
Los campos no definidos para un sistema de ficheros particular se ponen a 0. fstatfs devuelve la misma información sobre un fichero abierto referenciado por el descriptor fd.
VALOR DEVUELTO
Si hubo éxito se devuelve cero. Si hubo error, se devuelve −1, y errno es actualizado apropiadamente.
ERRORES
Para
statfs:
ENOTDIR
Un componente del camino path no es un directorio.
ENAMETOOLONG
path es demasiado largo.
ENOENT |
El fichero al que se refiere path no existe. | ||
EACCES |
El permiso de búsqueda se deniega para un componente del camino path. | ||
ELOOP |
Se encontraron demasiados enlaces simbólicos al traducir path. | ||
EFAULT |
buf o path apuntan a una dirección inválida. | ||
EIO |
Ocurrió un error de E/S mientras se leía o escribía en el sistema de ficheros. | ||
ENOMEM |
No había suficiente memoria disponible en el núcleo. | ||
ENOSYS |
El sistema de ficheros sobre el que se encuentra path no soporta statfs. |
Para fstatfs:
EBADF |
fd no es un descriptor de fichero válido. | ||
EFAULT |
buf apunta a una dirección inválida. | ||
EIO |
Ocurrió un error de E/S mientras se leía o escribía en el sistema de ficheros. | ||
ENOSYS |
El sistema de ficheros sobre el que está abierto fd no soporta statfs. |
CONFORME A
La versión de Linux de statfs está inspirada en la de 4.4BSD (aunque no usan la misma estructura).
f_fsid
Solaris y POSIX 1003.1-2001 poseen una llamada al sistema
statvfs que devuelve una estructura statvfs
(definida en <sys/statvfs.h>) con un campo
f_fsid de tipo unsigned long . Linux, SunOS,
HPUX y 4.4BSD poseen una llamada al sistema statfs
que devuelve una estructura statfs (definida en
<sys/vfs.h>) con un campo f_fsid de tipo
fsid_t , donde fsid_t está definido
como struct { int val[2]; }. Lo mismo se aplica para
FreeBSD, salvo que utiliza el fichero de cabecera
<sys/mount.h>.
La idea general es que f_fsid contenga información aleatoria de manera que el par (f_fsid,ino) determine unívocamente un fichero. Algunos SOs usan (una variante de) el número de dispositivo, o el número de dispositivo combinado con el tipo de sistema de ficheros. Muchos SOs restringen el acceso al campo f_fsid solamente al superusuario (poniéndolo a cero para aquellos usuarios sin privilegios), ya que este campo es usado en el manejo de ficheros del sistema de ficheros cuando es exportado mediante NFS, y conceder acceso a él es un problema de seguridad.
En algunos SOs fsid puede ser usado como segundo parámetro en la llamada al sistema sysfs().
VÉASE TAMBIÉN
stat(2)