我想通过 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;
存在一些问题。
首先,我不喜欢使用命令,因为它会变得很复杂,它会充满相互转换的类型。像要浮动的字符串和...第二个是使用运行命令,我不能有未安装的分区可用空间。
第三个问题是硬盘本身可能被卸载!另一种方法是:
2-using statvfs structure.
同样,使用这种结构,您可以安装硬盘的可用空间。我正在使用的代码:
#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;
}
我看过这个链接:Get free space of HDD in linux
但是stat的输出与我在df命令输出中看到的数字不同。
我正在使用 Qt,我的操作系统是 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