1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| /*
jipété, déc. 2018
compil sous Geany : F8 puis F9
mettre ce define *AVANT* les include's, sinon gcc pas content
et erreur EOVERFLOW si fichier > 2,147 Gb
vient de coreutils-version/lib/config.h, rajouté (long long) et modifié lu --> llu
*/
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h> // sync
#include <sys/statfs.h>
int main(int args, char * argv[]){
struct statfs stat_fs;
int bsize;
long long grdtotal, reserved, usable, used, dispo;
if (args < 2) {
fprintf (stderr, "syntaxe : %s <fichier> [-p]\n ", argv[0]);
exit (1);
}
sync();
if (statfs (argv[1], &stat_fs) != 0) { exit (errno); }
// données utiles genre 'df -B1 fichier'
bsize = stat_fs.f_bsize;
grdtotal = (long long) stat_fs.f_blocks * bsize;
used = (long long) (stat_fs.f_blocks - stat_fs.f_bfree) * bsize;
reserved = (long long) ((stat_fs.f_blocks - stat_fs.f_bavail) * bsize) - used;
dispo = (long long) stat_fs.f_bavail * bsize;
usable = (long long) dispo + used;
if (argv[2] != NULL) {
if (argv[2] [0] == '-') {
if (argv[2] [1] == 'p') {
printf("%d %llu %llu %llu %llu %llu\n", bsize, grdtotal, reserved, usable, used, dispo);
}
}
} else {
fprintf (stdout, "Taille optimale des blocs : %d\n", bsize);
fprintf (stdout, "Grand total : %16llu octets\n", grdtotal);
fprintf (stdout, "Espace réservé pour le fs : %16llu octets\n", reserved);
fprintf (stdout, "Taille totale utilisable : %16llu octets\n", usable);
fprintf (stdout, "Espace utilisé : %16llu octets\n", used);
fprintf (stdout, "Espace disponible : %16llu octets\n", dispo); // = df -B1 "Dispo"
}
return 0;
} |
Partager