我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 现在对我来说有点太复杂了