| Linux | CentOS 4.8 | |
|  | statfs(2) |  | 
| statfs, fstatfs − Obtenir des statistiques sur le système de fichiers. | 
| #include <sys/vfs.h> int statfs(const char *path, struct
statfs *buf); | 
| statfs renvoie des informations à propos d’un système de fichiers montés. path est le nom d’un fichier quelconque dans le système de fichiers. buf est un pointeur sur une structure statfs définie comme suit : | 
| struct statfs {
   long    f_type;     /* type de système de fichier        */
   long    f_bsize;    /* Taille optimale de bloc           */
   long    f_blocks;   /* Nombre total de blocs             */
   long    f_bfree;    /* Blocs libres                      */
   long    f_bavail;   /* Blocs libres pour utilisateurs    */
   long    f_files;    /* Nombres de noeuds                 */
   long    f_ffree;    /* Nombre de noeuds libres           */
   fsid_t  f_fsid;     /* ID du système de fichiers         */
   long    f_namelen;  /* Longueur maxi des noms de fichier */
   long    f_spare[6]; /* réservé pour usage ultérieur      */
};
Types de systèmes de fichiers :
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 original   */
   MINIX_SUPER_MAGIC2     0x138F  /* Minix 30 caract. */
   MINIX2_SUPER_MAGIC     0x2468  /* Minix V2         */
   MINIX2_SUPER_MAGIC2    0x2478  /* Minix V2 30 car. */
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
 | 
| 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 le descripteur fd. | 
| statfs et fstatfs renvoient zéro s’ils réussissent. En cas d’échec −1 est renvoyé, et errno contient le code d’erreur. | 
| Pour statfs: | 
| ENOTDIR | Un élément du chemin d’accès path n’est pas un répertoire | 
| ENAMETOOLONG | 
| path est trop long. | 
| ENOENT | Le fichier indiqué par path n’existe pas. | ||
| EACCES | Un élément du chemin d’accès path ne permet pas le parcours. | ||
| ELOOP | path contient une référence circulaire (à travers un lien symbolique). | ||
| EFAULT | Buf ou path pointent en dehors de l’espace d’adressage accessible | ||
| EIO | Une erreur d’entrée/sortie s’est produite pendant la lecture dans le système de fichiers. | ||
| ENOMEM | Pas assez de mémoire pour le noyau. | ||
| ENOSYS | Le système de fichiers contenant path ne supporte pas l’appel statfs. | 
| Pour fstatfs: | 
| EBADF | Fd n’est pas un descripteur de fichier ouvert valide. | ||
| EFAULT | Buf pointe en dehors de l’espace d’adressage accessible | ||
| EIO | Une erreur d’entrée/sortie s’est produite pendant la lecture dans le système de fichiers. ENOSYS Le système de fichiers contenant fd ne supporte pas l’appel statfs. | 
| #include <stdio.h> | ||
| #include <stdlib.h> | ||
| #include <sys/vfs.h> | ||
| /* Les en-têtes ci dessous définissent les constantes | ||
| * symboliques pour les nombres magiques des systèmes | ||
| * de fichiers | ||
| */ | ||
| #include <linux/affs_fs.h> | ||
| #include <linux/ext_fs.h> | ||
| #include <linux/ext2_fs.h> | ||
| #include <linux/hpfs_fs.h> | ||
| #include <linux/iso_fs.h> | ||
| #include <linux/minix_fs.h> | ||
| #include <linux/msdos_fs.h> | ||
| #include <linux/ncp_fs.h> | ||
| #include <linux/nfs_fs.h> | ||
| #include <linux/proc_fs.h> | ||
| #include <linux/smb_fs.h> | ||
| #include <linux/sysv_fs.h> | ||
| #include <linux/ufs_fs.h> | ||
| #include <linux/xia_fs.h> | 
| int | 
| struct statfs sts; | ||||||
| char | nom_systeme_fichier [10]; | |||||
| if (nb_args != 2) { | ||||||
| fprintf (stderr, "syntaxe : %s <fichier>\n ", args [0]); | ||||||
| exit (1); | ||||||
| } | ||||||
| if (statfs (args [1], & sts) != 0) { | ||||||
| fprintf (stderr, "%s : erreur %X\n ", args [0], errno); | ||||||
| exit (1); | ||||||
| } | ||||||
| switch (sts . f_type) { | ||||||
| case AFFS_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "AFFS"); | ||||||
| break; | ||||||
| case EXT2_SUPER_MAGIC : | ||||||
| case EXT2_OLD_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "EXT 2"); | ||||||
| break; | ||||||
| case EXT_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "EXT"); | ||||||
| break; | ||||||
| case HPFS_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "HP"); | ||||||
| break; | ||||||
| case ISOFS_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "ISO"); | ||||||
| break; | ||||||
| case MINIX_SUPER_MAGIC : | ||||||
| case MINIX_SUPER_MAGIC2 : | ||||||
| case MINIX2_SUPER_MAGIC : | ||||||
| case MINIX2_SUPER_MAGIC2 : | ||||||
| strcpy (nom_systeme_fichier, "MINIX"); | ||||||
| break; | ||||||
| case MSDOS_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "MS-DOS"); | ||||||
| break; | ||||||
| case NCP_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "NCP"); | ||||||
| break; | ||||||
| case NFS_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "NFS"); | ||||||
| break; | ||||||
| case PROC_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "PROC"); | ||||||
| break; | ||||||
| case SMB_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "SMB"); | ||||||
| break; | ||||||
| case XENIX_SUPER_MAGIC : | ||||||
| case SYSV4_SUPER_MAGIC : | ||||||
| case SYSV2_SUPER_MAGIC : | ||||||
| case COH_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "SysV"); | ||||||
| break; | ||||||
| case UFS_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "UFS"); | ||||||
| break; | ||||||
| case _XIAFS_SUPER_MAGIC : | ||||||
| strcpy (nom_systeme_fichier, "XIA"); | ||||||
| break; | ||||||
| default : | ||||||
| strcpy (nom_systeme_fichier, "???"); | ||||||
| } | ||||||
| fprintf (stdout, | ||||||
| "Système de fichiers : %s\n", | ||||||
| nom_systeme_fichier); | ||||||
| fprintf (stdout, | ||||||
| "Taille optimale de blocs : %ld\n", | ||||||
| sts . f_bsize); | ||||||
| fprintf (stdout, | ||||||
| "Taille totale : %ld blocs\n", | ||||||
| sts . f_blocks); | ||||||
| fprintf (stdout, | ||||||
| "Espace libre : %ld blocs\n", | ||||||
| sts . f_bfree); | ||||||
| fprintf (stdout, | ||||||
| "Espace utilisateurs : %ld blocs\n", | ||||||
| sts . f_bavail); | ||||||
| fprintf (stdout, | ||||||
| "Nombre de noeuds : %ld\n", | ||||||
| sts . f_files); | ||||||
| fprintf (stdout, | ||||||
| "Nombre de noeuds libres : %ld\n", | ||||||
| sts . f_ffree); | ||||||
| fprintf (stdout, | ||||||
| "ID du système de fichiers : %X\n", | ||||||
| sts . f_fsid); | ||||||
| fprintf (stdout, | ||||||
| "Longueur maxi noms fichiers : %ld\n", | ||||||
| sts . f_namelen); | 
| } | 
| La routine statfs de Linux a été inspirée par celle de BSD 4.4, mais n’emploie pas la même structure. | 
| stat(2) | 
| Christophe Blaess, 1997. | 
|  | statfs(2) |  |