statvfs неправильный SD доступный размер возвращен - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь отслеживать доступный размер 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 *

Заранее спасибо.

1 Ответ

1 голос
/ 21 февраля 2020

Это:

printf("size in bytes: %ld\n", stat.f_blocks*stat.f_bavail);

- это умножение двух блоков, что, безусловно, не то, что вы имели в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...