如何免费获得硬盘 space
how to get hdd's free space
我想使用 ssh 在远程系统中获得免费的硬盘大小。
我是这样找到的:
1-do it via command line: hdd's totalsize - sum of partitions size on that hdd + sum of free spaces on all partitions on that hdd;
这种方式有一些问题。
首先,我不喜欢使用命令,因为它会变得很复杂,它会充满类型之间的转换。像字符串浮动和...
第二个是使用 运行 命令,我不能让卸载的分区空闲 space。
第三个问题是硬盘本身可能被卸载了!
另一种方式是:
2-using statvfs structure.
同样,使用此结构,您可以挂载硬盘的空闲 space。
我正在使用的代码:
#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(argv[1], &buffer);
if (!ret) {
const double total = (double)(buffer.f_blocks * buffer.f_bsize) / GB;
const double available = (double)(buffer.f_bfree * buffer.f_bsize) / 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;
}
我看过这个 link:
但是 stat 的输出与我在 df 命令输出中看到的数字不相似。
我正在使用 Qt,我的 os 是 ubuntu 18.04.
当我运行这段代码时,我得到了这个:
heydari.f@swkb-dev2:~/projects/cpptest/build-cpptest-Desktop-Debug$ ./cpptest .
Total: 31.570432 --> 32
Available: 15.594684 --> 16
Used: 15.975748 --> 16.0
Used Percentage: 50.603513 --> 51
我的 df 的输出是这样的:
heydari.f@swkb-dev2:~$ df -H ~/projects/cpptest/build-cpptest-Desktop-Debug
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 32G 16G 14G 54% /
编辑:
heydari.f@swkb-dev2:~/projects/cpptest/build-cpptest-Desktop-Debug$ ./cpptest .
Total: 31.570432 --> 32
Available: 13.967569 --> 14
Used: 17.602863 --> 17.6
Used Percentage: 55.757435 --> 56
你没有给出你的结果,所以我可以看到两个原因:
首先可能是您在执行 buffer.f_blocks * buffer.f_bsize
和 buffer.f_bfree * buffer.f_bsize
时发生溢出,因为您的 unsigned long
在 32b 上,例如:
const double total = ((double) buffer.f_blocks) * buffer.f_bsize / GB;
const double available = ((double) buffer.f_bfree) * buffer.f_bsize / GB;
第二个 df 1Gb 是 1000*1000*1000
而不是 1024*1024*1024
如果我在我的 2Gb PI4 上执行你的版本,我得到:
pi@raspberrypi:/tmp $ ./a.out .
Total: 3.338009 --> 3
Available: 0.439247 --> 0
Used: 2.898762 --> 2.9
Used Percentage: 86.841044 --> 87
pi@raspberrypi:/tmp $
修改后避免溢出我得到
pi@raspberrypi:/tmp $ ./a.out .
Total: 27.338009 --> 27
Available: 16.439247 --> 16
Used: 10.898762 --> 10.9
Used Percentage: 39.866699 --> 40
pi@raspberrypi:/tmp $
而 df -H .
给出:
pi@raspberrypi:/tmp $ df -H .
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/root 30G 12G 17G 42% /
但是
pi@raspberrypi:/tmp $ bc
30*1000*1000*1000/1024/1024/1024
27
pi@raspberrypi:/tmp $
我想使用 ssh 在远程系统中获得免费的硬盘大小。
我是这样找到的:
1-do it via command line: hdd's totalsize - sum of partitions size on that hdd + sum of free spaces on all partitions on that hdd;
这种方式有一些问题。
首先,我不喜欢使用命令,因为它会变得很复杂,它会充满类型之间的转换。像字符串浮动和...
第二个是使用 运行 命令,我不能让卸载的分区空闲 space。
第三个问题是硬盘本身可能被卸载了!
另一种方式是:
2-using statvfs structure.
同样,使用此结构,您可以挂载硬盘的空闲 space。
我正在使用的代码:
#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(argv[1], &buffer);
if (!ret) {
const double total = (double)(buffer.f_blocks * buffer.f_bsize) / GB;
const double available = (double)(buffer.f_bfree * buffer.f_bsize) / 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;
}
我看过这个 link:
但是 stat 的输出与我在 df 命令输出中看到的数字不相似。
我正在使用 Qt,我的 os 是 ubuntu 18.04.
当我运行这段代码时,我得到了这个:
heydari.f@swkb-dev2:~/projects/cpptest/build-cpptest-Desktop-Debug$ ./cpptest .
Total: 31.570432 --> 32
Available: 15.594684 --> 16
Used: 15.975748 --> 16.0
Used Percentage: 50.603513 --> 51
我的 df 的输出是这样的:
heydari.f@swkb-dev2:~$ df -H ~/projects/cpptest/build-cpptest-Desktop-Debug
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 32G 16G 14G 54% /
编辑:
heydari.f@swkb-dev2:~/projects/cpptest/build-cpptest-Desktop-Debug$ ./cpptest .
Total: 31.570432 --> 32
Available: 13.967569 --> 14
Used: 17.602863 --> 17.6
Used Percentage: 55.757435 --> 56
你没有给出你的结果,所以我可以看到两个原因:
首先可能是您在执行 buffer.f_blocks * buffer.f_bsize
和 buffer.f_bfree * buffer.f_bsize
时发生溢出,因为您的 unsigned long
在 32b 上,例如:
const double total = ((double) buffer.f_blocks) * buffer.f_bsize / GB;
const double available = ((double) buffer.f_bfree) * buffer.f_bsize / GB;
第二个 df 1Gb 是 1000*1000*1000
而不是 1024*1024*1024
如果我在我的 2Gb PI4 上执行你的版本,我得到:
pi@raspberrypi:/tmp $ ./a.out .
Total: 3.338009 --> 3
Available: 0.439247 --> 0
Used: 2.898762 --> 2.9
Used Percentage: 86.841044 --> 87
pi@raspberrypi:/tmp $
修改后避免溢出我得到
pi@raspberrypi:/tmp $ ./a.out .
Total: 27.338009 --> 27
Available: 16.439247 --> 16
Used: 10.898762 --> 10.9
Used Percentage: 39.866699 --> 40
pi@raspberrypi:/tmp $
而 df -H .
给出:
pi@raspberrypi:/tmp $ df -H .
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/root 30G 12G 17G 42% /
但是
pi@raspberrypi:/tmp $ bc
30*1000*1000*1000/1024/1024/1024
27
pi@raspberrypi:/tmp $