Как получить использование диска в linux с помощью программы c? - PullRequest
0 голосов
/ 13 марта 2020

Я хочу получить использование диска в linux, но когда я запускаю приведенный выше код, результат неверный.

#include <stdio.h>
#include <sys/statvfs.h>

int main(int argc, const char *argv[])
{

    const unsigned int GB = (1024 * 1024) * 1024;
    struct statvfs buffer;
    int ret = statvfs("/dev/sda4", &buffer);

    if (!ret) {
        const double total = (double)(buffer.f_blocks * buffer.f_frsize) / GB;
        const double available = (double)(buffer.f_bfree * buffer.f_frsize) / GB;
        const double used = total - available;
        const double usedPercentage = (double)(used / total) * (double)100;
        printf("Total: %f --> %.0f\n", total, total);
        printf("Available: %f --> %.0f\n", available, available);
        printf("Used: %f --> %.1f\n", used, used);
        printf("Used Percentage: %f --> %.0f\n", usedPercentage, usedPercentage);
    }
    return ret;
}

Вывод:

Total: 7.757446 --> 8
Available: 7.757446 --> 8
Used: 0.000000 --> 0.0
Used Percentage: 0.000000 --> 0

Я запускаю команду df на linux терминале. Вывод:

Filesystem       1K-blocks    Used  Available   Use% Mounted on      
**/dev/sda4      471705824 13885152 433789596   4% /**

Эти два результата отличаются друг от друга. В чем причина?

1 Ответ

2 голосов
/ 13 марта 2020

Нельзя использовать устройство "/ dev / sda4". Вы должны использовать путь, где устройство было установлено как "/" или "/ home". Если вы используете имя устройства, вы получите результат для файловой системы "udev".

...