Возьмем к примеру /dev/block/mmcblk0p25 - правильно будет 571391 * 1024 = 585104384 b = 557.99902 Mb - это полный размер (из информации /proc/partitions)
А теперь возьмем statfs - f_bsize: 4096 * f_blocks: 172213 = 705384448 - это вообще что такое ? Оо
Посоветуйте другой способ, обязательно чтобы без рута ... очень нужно..
struct statvfs {
unsigned long f_bsize; /* размер блока файловой системы */
unsigned long f_frsize; /* размер фрагмента */
fsblkcnt_t f_blocks; /* размер ФС ===> в единицах f_frsize <=== */
Я так понимаю, /proc/partitions содержит информацию безотносительно файловой системы, т. е. то что в таблице разделов записано: данные файловой системы располагаются в блоках таких-то.
df же напротив, показывает полный доступный размер для данных в файловой системе, занятое файлами место и свободное место. При этом кроме собственно файлов в ФС есть еще куча метаданных, которые имеют ненулевой размер, отсюда и разница.
df displays the amount of disk space available on the file system containing each file name argument. If no file name is given, the space available on all currently mounted file systems is shown. Disk space is shown in 1K blocks by default, unless the environment variable POSIXLY_CORRECT is set, in which case 512-byte blocks are used.
Тут надо различать понятия «раздел» и «файловая система на разделе». Вторая может быть меньше (то есть конец файловой системы не обязан совпадать с размером раздела).
Ок, спасибо
Наверное буду брать полный размер из /proc/partitions , отнимать фри размер из fsstat, чтобы получить использованный правильный размер...
Так будет правильно , вообще то ?
Вообще-то, вроде как, и не правильно. Я думаю, стоит в этом смысле ориентироваться на df. Всё равно это в некотором смысле приблизительные цифры, так что до байта размер рассчитать не выйдет.
Просто если брать размер раздела, а отнимать свободное место на файловой системе, это получается как будто мы из километров вычитаем голубое: непонятно, как потом полученную цифру интерпретировать. Хотя, впрочем, я кажется могу придумать, зачем она может быть нужна. Задачу можешь более явно описать, что потом с этим знанием делать надо?
Пишу инфо утилиту для андроида.
Дело в том , что мое замечание Програмно узнать свободный размер точки монтирования (комментарий) по подсчетам использованного и свободного места в точности соответствует методике подсчета одной из популярных дисковых инфо утилит, выложенных в андроид маркете ...