Other Alias
fstatfsSINOPSIS
#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().