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.
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)