D: 如何在 media/partition 上获得空闲磁盘 space?
D: How to get free disk space on media/partition?
我需要获取分区的总大小和可用大小。我怎样才能用D得到它?
我应该使用哪些功能?
它当然是特定于操作系统的。在 Linux 系统上,您需要 statfs(2) 系统调用(在 C 中)。您可能需要自己制作 C 和 D 之间的胶水代码。
在 Posix 系统(包括 Linux,但通常不包括 Windows)上,您可以使用 statvfs
C 函数,它在 D 中通过 import core.sys.posix.sys.statvfs;
.
一般来说,任何 Posix C 函数都在 import core.sys.posix.something
中,其中 something
与 C #cinlude
名称相同,只是换出了 /
.
.
无论如何,这个小程序将打印出一些关于安装在 "/"
:
的文件系统的信息
import core.sys.posix.sys.statvfs;
import std.stdio;
void main() {
statvfs_t buf;
if(statvfs("/", &buf))
throw new Exception("failed");
writeln(buf.f_bfree * buf.f_bsize, " free bytes");
writeln(buf.f_blocks * buf.f_bsize, " total size in bytes");
writeln((buf.f_bfree * buf.f_bsize) / 1024, " free KB");
writeln((buf.f_blocks * buf.f_bsize) / 1024, " total size in KB");
writeln(100 - (buf.f_bfree * 100 / buf.f_blocks), "% used");
}
这是一个非常简单的函数调用。在 Windows 上有所不同,但同样简单:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364937%28v=vs.85%29.aspx
只需调用该函数即可。如果你需要,我也可以为此写一个例子,虽然我现在没有,因为包含它的更新 Windows headers 将在几周后的下一个 D 版本中包含,所以你现在必须extern(Windows)
...但几周后你就不需要了。
我需要获取分区的总大小和可用大小。我怎样才能用D得到它? 我应该使用哪些功能?
它当然是特定于操作系统的。在 Linux 系统上,您需要 statfs(2) 系统调用(在 C 中)。您可能需要自己制作 C 和 D 之间的胶水代码。
在 Posix 系统(包括 Linux,但通常不包括 Windows)上,您可以使用 statvfs
C 函数,它在 D 中通过 import core.sys.posix.sys.statvfs;
.
一般来说,任何 Posix C 函数都在 import core.sys.posix.something
中,其中 something
与 C #cinlude
名称相同,只是换出了 /
.
.
无论如何,这个小程序将打印出一些关于安装在 "/"
:
import core.sys.posix.sys.statvfs;
import std.stdio;
void main() {
statvfs_t buf;
if(statvfs("/", &buf))
throw new Exception("failed");
writeln(buf.f_bfree * buf.f_bsize, " free bytes");
writeln(buf.f_blocks * buf.f_bsize, " total size in bytes");
writeln((buf.f_bfree * buf.f_bsize) / 1024, " free KB");
writeln((buf.f_blocks * buf.f_bsize) / 1024, " total size in KB");
writeln(100 - (buf.f_bfree * 100 / buf.f_blocks), "% used");
}
这是一个非常简单的函数调用。在 Windows 上有所不同,但同样简单:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364937%28v=vs.85%29.aspx
只需调用该函数即可。如果你需要,我也可以为此写一个例子,虽然我现在没有,因为包含它的更新 Windows headers 将在几周后的下一个 D 版本中包含,所以你现在必须extern(Windows)
...但几周后你就不需要了。