STATFS(2)

NOM
statfs, fstatfs - Obtenir des statistiques sur le systeme de fichiers.

SYNOPSIS
#include <sys/vfs.h>

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

DESCRIPTION
statfs et fstatfs renvoie des informations a propos d'un systeme de fichiers montes. Path est le nom d'un fichier quelconque dans le systeme de fichiers. Buf est un pointeur sur une structure statfs definie comme suit :
    struct statfs {
       long    f_type;     /* type de systeme de fichier           */
       long    f_bsize;    /* Taille optimale de bloc de transfert */
       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 systeme de fichiers            */
       long    f_namelen;  /* Longueur maxi des noms de fichiers   */
       long    f_spare[6]; /* reserve pour usage ulterieur         */
    };
    Types de systemes de fichiers :
    linux/ext2_fs.h:  EXT2_SUPER_MAGIC      0xEF53
    linux/ext_fs.h:   EXT_SUPER_MAGIC       0x137D
    linux/iso_fs.h:   ISOFS_SUPER_MAGIC     0x9660
    linux/minix_fs.h: MINIX_SUPER_MAGIC     0x137F
    linux/minix_fs.h: MINIX_SUPER_MAGIC2    0x138F
    linux/minix_fs.h: MINIX2_SUPER_MAGIC    0x2468
    linux/minix_fs.h: MINIX2_SUPER_MAGIC2   0x2478
    linux/msdos_fs.h: MSDOS_SUPER_MAGIC     0x4d44
    linux/nfs_fs.h:   NFS_SUPER_MAGIC       0x6969
    linux/proc_fs.h:  PROC_SUPER_MAGIC      0x9fa0
    linux/xia_fs.h:   _XIAFS_SUPER_MAGIC    0x012FD16D

Les champs indefinis pour un systeme de fichiers donnes sont mis a -1. Fstatfs renvoie les memes informations concernant un fichier ouvert reference par le descripteur fd.

VALEUR RENVOYEE
statfs et fstatfs retournent zero s'ils reussissent. En cas d'echec -1 est renvoye, et errno contient le code d'erreur.

ERREURS
Pour statfs:

ENOTDIR
    Un element du chemin d'acces Path n'est pas un repertoire

EINVAL
    path contient des caracteres errones.

ENAMETOOLONG
    path est trop long.

ENOENT
    Le fichier indique par path n'existe pas.

EACCES
    Un element du chemin d'acces path ne permet pas le parcours.

ELOOP
    path contient une reference circulaire (a travers un lien symbolique).

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

EIO Une erreur d'entree/sortie s'est produite pendant la lecture dans le systeme de fichiers.

For 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'entree/sortie s'est produite pendant la lecture dans le systeme de fichiers.

EXEMPLE
	#include <stdio.h>
	#include <stdlib.h>
	#include <sys/vfs.h>
	/* Les en-tetes ci dessous definissent les constantes
	 * symboliques pour les nombres magiques des systemes
	 * de fichiers
	 */
	#include <linux/ext2_fs.h>
	#include <linux/ext_fs.h>
	#include <linux/iso_fs.h>
	#include <linux/minix_fs.h>
	#include <linux/msdos_fs.h>
	#include <linux/nfs_fs.h>
	#include <linux/xia_fs.h>
int
main (int nb_args, char * args [])
{
	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 EXT2_SUPER_MAGIC :
			strcpy (nom_systeme_fichier, "EXT 2");
			break;
		case EXT_SUPER_MAGIC :
			strcpy (nom_systeme_fichier, "EXT");
			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 NFS_SUPER_MAGIC :
			strcpy (nom_systeme_fichier, "NFS");
			break;
		case _XIAFS_SUPER_MAGIC :
			strcpy (nom_systeme_fichier, "XIA");
			break;
		default :
			strcpy (nom_systeme_fichier, "???");
	}
	fprintf (stdout,
		"Systeme 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 systeme de fichiers : %X\n",
		sts . f_fsid);
	fprintf (stdout,
		"Longueur maxi noms fichiers : %ld\n",
		sts . f_namelen);
}

CONFORMITE
BSD 4.4.

VOIR AUSSI
stat(2)