2009-09-19 5 views

Répondre

8
#include <sys/statvfs.h> 
#include <iostream> 
#include <cstring> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    struct statvfs fiData; 

    if(argc < 2) { 
      cout <<"Usage, ./size dir1 dir2 ... dirN\n"; 
      return(1); 
    } 

    //Lets loopyloop through the argvs 
    for(int i= 1 ; i<argc; i++) { 
      if((statvfs(argv[i],&fiData)) < 0) { 
        cout << "\nFailed to stat:" << argv[i]; 
      } else { 
        cout << "\nDisk: " << argv[i]; 
        cout << "\nBlock size: "<< fiData.f_bsize; 
        cout << "\nTotal no blocks: "<< fiData.f_blocks; 
        cout << "\nFree blocks: "<< fiData.f_bfree; 
      } 
    } 
} 

Compilation: g ++ -o taille file.cpp

test: ./size Dir1 Dir2

+0

Utilisez 'fiData.f_bavail' à la place de' fiData.f_bfree' pour le nombre de blocs libres disponibles pour le processus non-privilégié. Cela aidera à calculer le disque libre plus précis disponible. –

1

L'original Linux statfs() et fstatfs Les appels système() n'ont pas été conçus pour des tailles de fichier extrêmement importantes. Par la suite, 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 d'origine, mais les tailles des différents champs sont augmentées pour accueillir des fichiers de grande taille. voir http://linux.die.net/man/2/statfs64

Questions connexes