Здравствуйте!Пытаюсь с помощью statfs получить информацию о свободном месте на файловой системе.
Код такой:
#include <sys/statfs.h>
struct statfs diskFree;
statfs ( diskPartition, &diskFree );
value = diskFree.f_bsize * diskFree.f_bavail;Переменная diskPartition - путь до смонтированной файловой системы;
Переменная value - возвращенное количество байт свободного места;
Проблема в том что на корневом разделе место определяется правильно (сам раздел 5 гигов, свободного места - 900 мегабайт), но на большом разделе (20 гигабайт) место определяется неправильно (вместо 12 гигабайт возврашается 4 гигабайта).Подскажите че делать?
Или придется тупо вывод команды df отрабатывать...
>Подскажите че делать?
>Или придется тупо вывод команды df отрабатывать...дак мож собственно код df глянуть?
и не изобретать велосипед )))
>[оверквотинг удален]
>
>Переменная diskPartition - путь до смонтированной файловой системы;
>Переменная value - возвращенное количество байт свободного места;
>Проблема в том что на корневом разделе место определяется правильно (сам раздел
>5 гигов, свободного места - 900 мегабайт), но на большом разделе
>(20 гигабайт) место определяется неправильно (вместо 12 гигабайт возврашается 4 гигабайта).
>
>
>Подскажите че делать?
>Или придется тупо вывод команды df отрабатывать...Товарищ, ты пытаешься не свободное место, а моток колючей проволоки получить от скрещивания ежа с ужом :)
long f_bsize; /* optimal transfer block size */
"оптимал трансфер блок сайз" это не тоже самое, что "блок сайз"
Про statvfs читай. И вообще, не принебрегай разделом "see also"
Фух... вроде разобрался...Вот код:
#include <sys/statvfs.h>
struct statvfs diskFree;
statvfs ( diskPartition, &diskFree );
/* cout << "f_bfree = " << diskFree.f_bfree << endl;
cout << "f_bavail = " << diskFree.f_bavail << endl;
cout << "f_bsize = " << diskFree.f_bsize << endl;
cout << "f_files = " << diskFree.f_files << endl;
cout << "f_blocks = " << diskFree.f_blocks << endl;*/
value = int(double(diskFree.f_bavail) * double(diskFree.f_bsize)/1024.0/1024.0);Основная проблема была в том, что я забыл о преобразовании типов. Я и до вышеуказанных советов пытался использовать statvfs, но результаты вызывали легкий шок. А все просто если делишь что-то на что-то надо не забывать преобразовывать типы данных (как double в мое примере).
Всем спасибо большое... тема закрыта...