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