Я пытаюсь отслеживать доступный размер SD-карты во встроенной системе linux (peta linux).
После поиска этой топики c вокруг stackoverflow я узнаю, что хороший вариант использовать структуру statvfs.
Итак, чтобы проверить это, я написал следующий код:
int main()
{
struct statvfs stat;
if (statvfs("/run/media/mmcblk1p2", &stat) != 0) {
// error happens, just quits here
return -1;
}
printf("bsize: %ld\n", stat.f_bsize);
printf("bavail: %ld\n", stat.f_blocks);
printf("size in bytes: %ld\n", stat.f_blocks*stat.f_bavail);
double megas= (((double)(stat.f_blocks*stat.f_bavail)) / (1024*1024));
printf("size in MB:%.0f \n", megas);
return 0;
}
И вывод:
bsize: 131072
bavail: 973877
size in bytes: 945460243017
size in MB:901661
Проверка это с помощью У меня есть команда df:
root@petalinux:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 484744 4 484740 0% /dev
tmpfs 1023712 128 1023584 0% /run
tmpfs 1023712 88 1023624 0% /var/volatile
/dev/mmcblk1p2 124656256 391168 124265088 0% /run/media/mmcblk1p2
/dev/mmcblk1p1 204607 135889 68719 66% /run/media/mmcblk1p1
root@petalinux:~# df -h
Filesystem Size Used Available Use% Mounted on
devtmpfs 473.4M 4.0K 473.4M 0% /dev
tmpfs 999.7M 128.0K 999.6M 0% /run
tmpfs 999.7M 88.0K 999.6M 0% /var/volatile
/dev/mmcblk1p2 118.9G 382.0M 118.5G 0% /run/media/mmcblk1p2
/dev/mmcblk1p1 199.8M 132.7M 67.1M 66% /run/media/mmcblk1p1
Я бы ожидал, что для папки mmcblk1p2 будет доступно пространство 124265088 байт, но вместо этого у меня 945460243017 байт.
У меня уже был посмотрите на похожие вопросы, но, к сожалению, ни один из них не помог мне решить эту проблему.
У кого-нибудь есть идеи, что я делаю неправильно?
РЕДАКТИРОВАТЬ
Как указывалось, это может быть проблема умножения блоков, где у меня было:
stat.f_blocks*stat.f_bavail
И я изменил ее на:
stat.f_frsize*stat.f_bavail
Но результат все равно неправильный:
bsize: 131072
bavail: 973877
size in bytes: 127247450112
Size in MB:121353
Теперь показывается 127247450112 и должно быть 124265088, Есть идеи, что я не так понял? * 10 33 *
Заранее спасибо.