Linux |
CentOS 4.8 |
|
![]() |
fstatfs(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. |
![]() |
fstatfs(2) | ![]() |