我正在编写一个 C++ 程序,我需要获取分区和 hhd 的总空间、可用空间和已用空间。
我对可用于从系统获取这些数据的所有命令和代码以及输出之间的所有差异感到非常困惑。
我读了这个链接:为什么有这么多不同的方法来测量磁盘使用情况?,这很有用,但并没有真正帮助我解决我的问题,我理解和
的输出之间大小差异的原因是给出文件系统的大小和分区的大小。我需要的东西也是。但据我所知,只给出了分区的总大小。(我对吗?)我还在代码中使用了结构,并且输出与 df 的输出非常接近。那么我应该使用什么来获取分区和硬盘的确切可用大小、已用大小和总大小?lsblk
df
df
lsblk
partition's size
lsblk
statvfs
答案1
在命令行上,您可以使用:
lsblk -bo NAME,SIZE,FSTYPE,FSSIZE,FSUSED,FSAVAIL,FSUSE%
但在 C++ 程序中,您通常不想解析任何其他命令的输出:您应该使用系统和库调用来直接获取信息。
为工作寻找合适的需求更多的是 Stack Overflow 的领域,但这里有一些提示:
- 文件系统容量/已用/空闲值:
statvfs(2)
或者std::filesystem::space
。 - 块设备的大小:使用
BLKGETSIZE64
ioctl 获取以字节为单位的大小,如果需要以块为单位的大小,也可以使用 ioctlBLKSSZGET
获取块大小,并将以字节为单位的大小除以单个块的大小。这是另一个例子。