STATFS(2)

NOM
statfs, fstatfs - Obtenir des statistiques sur le système de fichiers

SYNOPSIS
#include <sys/vfs.h> /* ou <sys/statfs.h> */

int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);

DESCRIPTION
La fonction statfs() renvoie des informations à propos d'un système de fichiers monté. path est le nom d'un fichier quelconque dans le système de fichiers. buf est un pointeur sur une structure statfs approximativement définie comme suit :
#if __WORDSIZE == 32		/* Taille de mots du système */
# define __SWORD_TYPE		int
#else /* __WORDSIZE == 64 */
# define __SWORD_TYPE		long int
#endif
struct statfs {
   __SWORD_TYPE  f_type;     /* type de système de fichiers        */
   __SWORD_TYPE  f_bsize;    /* Taille optimale de bloc            */
   fsblkcnt_t    f_blocks;   /* Nombre total de blocs              */
   fsblkcnt_t    f_bfree;    /* Blocs libres                       */
   fsblkcnt_t    f_bavail;   /* Blocs libres pour util. ordinaires */
   fsfilcnt_t    f_files;    /* Nombres de nœuds                   */
   fsfilcnt_t    f_ffree;    /* Nombre de nœuds libres             */
   fsid_t        f_fsid;     /* ID du système de fichiers          */
   __SWORD_TYPE  f_namelen;  /* Longueur maxi des noms de fichier  */
   __SWORD_TYPE  f_frsize;   /* taille de fragment
                                (depuis Linux 2.6)                 */
   __SWORD_TYPE  f_spare[5];
};
Types de systèmes de fichiers :
   ADFS_SUPER_MAGIC      0xadf5
   AFFS_SUPER_MAGIC      0xADFF
   BDEVFS_MAGIC          0x62646576
   BEFS_SUPER_MAGIC      0x42465331
   BFS_MAGIC             0x1BADFACE
   BINFMTFS_MAGIC        0x42494e4d
   BTRFS_SUPER_MAGIC     0x9123683E
   CGROUP_SUPER_MAGIC    0x27e0eb
   CIFS_MAGIC_NUMBER     0xFF534D42
   CODA_SUPER_MAGIC      0x73757245
   COH_SUPER_MAGIC       0x012FF7B7
   CRAMFS_MAGIC          0x28cd3d45
   DEBUGFS_MAGIC         0x64626720
   DEVFS_SUPER_MAGIC     0x1373
   DEVPTS_SUPER_MAGIC    0x1cd1
   EFIVARFS_MAGIC        0xde5e81e4
   EFS_SUPER_MAGIC       0x00414A53
   EXT_SUPER_MAGIC       0x137D
   EXT2_OLD_SUPER_MAGIC  0xEF51
   EXT2_SUPER_MAGIC      0xEF53
   EXT3_SUPER_MAGIC      0xEF53
   EXT4_SUPER_MAGIC      0xEF53
   FUSE_SUPER_MAGIC      0x65735546
   FUTEXFS_SUPER_MAGIC   0xBAD1DEA
   HFS_SUPER_MAGIC       0x4244
   HOSTFS_SUPER_MAGIC    0x00c0ffee
   HPFS_SUPER_MAGIC      0xF995E849
   HUGETLBFS_MAGIC       0x958458f6
   ISOFS_SUPER_MAGIC     0x9660
   JFFS2_SUPER_MAGIC     0x72b6
   JFS_SUPER_MAGIC       0x3153464a
   MINIX_SUPER_MAGIC     0x137F /* Minix original               */
   MINIX_SUPER_MAGIC2    0x138F /* Minix 30 caractères          */
   MINIX2_SUPER_MAGIC    0x2468 /* Minix V2                     */
   MINIX2_SUPER_MAGIC2   0x2478 /* Minix V2, noms de 30 caract. */
   MINIX3_SUPER_MAGIC    0x4d5a /* SF Minix V3, noms de 60 car. */
   MQUEUE_MAGIC          0x19800202
   MSDOS_SUPER_MAGIC     0x4d44
   NCP_SUPER_MAGIC       0x564c
   NFS_SUPER_MAGIC       0x6969
   NILFS_SUPER_MAGIC     0x3434
   NTFS_SB_MAGIC         0x5346544e
   OPENPROM_SUPER_MAGIC  0x9fa1
   PIPEFS_MAGIC          0x50495045
   PROC_SUPER_MAGIC      0x9fa0
   PSTOREFS_MAGIC        0x6165676C
   QNX4_SUPER_MAGIC      0x002f
   QNX6_SUPER_MAGIC      0x68191122
   RAMFS_MAGIC           0x858458f6
   REISERFS_SUPER_MAGIC  0x52654973
   ROMFS_MAGIC           0x7275
   SELINUX_MAGIC         0xf97cff8c
   SMACK_MAGIC           0x43415d53
   SMB_SUPER_MAGIC       0x517B
   SOCKFS_MAGIC          0x534F434B
   SQUASHFS_MAGIC        0x73717368
   SYSFS_MAGIC           0x62656572
   SYSV2_SUPER_MAGIC     0x012FF7B6
   SYSV4_SUPER_MAGIC     0x012FF7B5
   TMPFS_MAGIC           0x01021994
   UDF_SUPER_MAGIC       0x15013346
   UFS_MAGIC             0x00011954
   USBDEVICE_SUPER_MAGIC 0x9fa2
   V9FS_MAGIC            0x01021997
   VXFS_SUPER_MAGIC      0xa501FCF5
   XENFS_SUPER_MAGIC     0xabba1974
   XENIX_SUPER_MAGIC     0x012FF7B4
   XFS_SUPER_MAGIC       0x58465342
   _XIAFS_SUPER_MAGIC    0x012FD16D

La plupart des constantes MAGIC sont définies dans /usr/include/linux/magic.h, certaines sont codées en dur dans les sources du noyau.

Personne ne sait ce que f_fsid est supposé contenir (voir plus loin).

Les champs indéfinis pour un système de fichiers donné sont mis à 0. fstatfs() renvoie les mêmes informations concernant un fichier ouvert référencé par fd.

VALEUR RENVOYÉE
S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit errno en conséquence.

ERREURS

EACCES
    (statfs()) Un élément du chemin d'accès path ne permet pas le parcours. (Consultez aussi path_resolution(7).)

EBADF
    (fstatfs()) fd n'est pas un descripteur de fichier ouvert valide.

EFAULT
    buf ou path pointent en dehors de l'espace d'adressage accessible.

EINTR
    L'appel a été interrompu par un signal.

EIO Une erreur d'entrée-sortie est survenue lors de la lecture sur le système de fichiers.

ELOOP
    (statfs()) path contient une référence circulaire (à travers un lien symbolique).

ENAMETOOLONG
    (statfs()) path est trop long.

ENOENT
    (statfs()) Le fichier indiqué par path n'existe pas.

ENOMEM
    Pas assez de mémoire pour le noyau.

ENOSYS
    Le système de fichiers ne supporte pas cet appel.

ENOTDIR
    (statfs()) Un élément du chemin d'accès path n'est pas un répertoire.

EOVERFLOW
    Certaines valeurs sont trop grandes pour être représentées dans la structure renvoyée.

CONFORMITÉ
Spécifique à Linux. La routine statfs() de Linux a été inspirée par celle de BSD 4.4, mais n'emploie pas la même structure.

NOTES
Les appels système statfs() et fstatfs() originaux de Linux n'ont pas été conçus pour gérer des fichiers de très grosse taille. En conséquence, Linux 2.6 a ajouté de nouveaux appels système statfs64() et fstatfs64() qui utilisent une nouvelle structure, statfs64. La nouvelle structure contient les mêmes champs que la structure statfs originale, mais les tailles des différents champs sont augmentées pour gérer de grandes tailles de fichiers. Les fonctions statfs() et fstatfs() de la glibc qui les encapsulent gèrent de manière transparente ces différences entre noyaux. Certains systèmes ont seulement <sys/vfs.h>, d'autres ont aussi <sys/statfs.h>, où le premier inclus le dernier. Aussi, il semble qu'inclure le premier soit le meilleur choix. LSB déconseille les appels bibliothèque statfs() et fstatfs() et demande d'utiliser statvfs(2) et fstatvfs(2) à la place.

  Le champ f_fsid
Solaris, Irix et POSIX ont un appel système statvfs(2) qui renvoie une struct statvfs (définie dans <sys/statvfs.h>) contenant un unsigned long f_fsid. Linux, SunOS, HP-UX, BSD 4.4 ont un appel système statfs() qui renvoie une struct statfs (définie dans <sys/vfs.h>) contenant un fsid_t f_fsid, où fsid_t est défini comme une struct { int val[2]; }. La même chose vaut pour FreeBSD, sauf que le fichier d'en-tête est <sys/mount.h>. L'idée générale est que f_fsid contient quelque chose qui permette que la paire (f_fsid,ino) identifie un fichier de manière unique. Certains systèmes utilisent (une variation sur) le numéro de périphérique combiné au type de système de fichiers. Plusieurs systèmes d’exploitation restreignent l'accès au champ f_fsid pour le superutilisateur (et indiquent zéro pour les utilisateurs normaux), car ce champ est utilisé dans la manipulation du système de fichiers lors d'exportation par NFS, et sa valeur peut être considérée comme un élément de sécurité.

Sous certains systèmes d’exploitation, le fsid peut être utilisé en second paramètre de l'appel système sysfs().

BOGUES
Depuis Linux 2.6.38 et jusqu’à Linux 3.1 compris, fstatfs() échouait avec l’erreur ENOSYS pour les descripteurs de fichiers pipe(2).

VOIR AUSSI
stat(2), statvfs(2), path_resolution(7)

COLOPHON
Cette page fait partie de la publication 3.70 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».