【发布时间】:2019-12-31 23:41:32
【问题描述】:
我正在使用statvfs 有一个非常简单的内部df 命令。
除了不知道如何获取文件系统设备路径之外,我的主要问题是可用的 1K 块在我的实现和df 输出中有所不同。
这是我的:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/x 959863856 21399352 938464504 2 /
df的:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 959863856 21399352 889636296 3% /
“已使用”和“可用”均以 1K 块为单位。该百分比可能是由于四舍五入所致。如何获得可用空间?
这是我的实现:
int main(int argc, char *argv[]) {
struct statvfs stats;
statvfs(argv[1], &stats);
unsigned long n_1k_blocks = stats.f_blocks * stats.f_frsize / 1024;
unsigned long avail = stats.f_bfree * stats.f_frsize / 1024;
unsigned long used = n_1k_blocks - avail;
printf("%-*s\t%*lu\t%*lu\t%*lu\t%*.0f\t%s\n",
spaces, "/dev/x",
spaces, n_1k_blocks,
spaces, used,
spaces, avail,
spaces, 100 - (float)stats.f_bfree * 100.0 / stats.f_blocks,
argv[1] // e.g. " / "
);
return 0;
}
我称它为:./a.out / 表示挂载在/ 的文件系统
旁注:环顾四周,我阅读了busybox的df source; coreutils 现在对我来说有点太复杂了
【问题讨论】:
标签: c linux filesystems linux-disk-free