2014-02-11 1 views
1

почему вывод команды ф.р. и statfs() значения системного вызова различны:различаются по выходу DF и statfs

Программа для вызова statfs:

#include <stdio.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <sys/vfs.h> 
#include <string.h> 
#include <stdlib.h> 


int main() 
{ 
    struct statfs vfs; 

    if (statfs("/", & vfs) != 0) { 
     fprintf(stderr, "%s: statfs failed: %s\n", 
      "/", strerror(errno)); 
     exit(0); 
    } 

    printf("mounted on %s:\n","/"); 

    printf("\tf_bsize: %ld\n", vfs.f_bsize); 
    printf("\tf_blocks: %ld\n", vfs.f_blocks); 
    printf("\tf_bfree: %ld\n", vfs.f_bfree); 
    printf("\tf_bavail: %ld\n", vfs.f_bavail); 
    printf("\tf_files: %ld\n", vfs.f_files); 
    printf("\tf_ffree: %ld\n", vfs.f_ffree); 

    return 0; 
} 

выход:

 
    mounted on /: 
     f_bsize: 4096 
     f_blocks: 119189762 
     f_bfree: 112718672 
     f_bavail: 106662506 
     f_files: 30285824 
     f_ffree: 29990111 

вывод команды ДФ:

 
    ~$ df/
    Filesystem  1K-blocks  Used Available Use% Mounted on 
    /dev/sda1  476759048 25882620 426651764 6%/

Команда df внутренне вызывает сам системный вызов statfs, но почему вывод отличается от значений структуры и вывода команды df, может ли кто-нибудь объяснить мне ясно. Данные

+0

Пожалуйста, смотрите http://stackoverflow.com/questions/4965355/converting-statvfs -в-процентные свободная правильно –

ответ

0

DF может быть основано на f_bavail, не f_bfree Таким образом, для расчета общего пространства и свободного пространства может быть следующим

long long Total_Space = vfs.f_blocks; 
Total_Space *= vfs.f_frsize; 
Total_Space /= 1024; 
long long Avail_Space = vfs.f_bfree; 
Avail_Space *= vfs.f_frsize; 
Avail_Space /= 1024; 

printf("Total Space=%lldKb Available Space=%lldKB\n",Total_Space,Avail_Space); 
Смежные вопросы