Debian
DBUS 獲取 USB 記憶體的可用磁碟空間
我正在嘗試使用 DBUS 連接器 ( ) 確定 USB 儲存設備上有多少可用磁碟空間
sdbus-c++
。為了接收 USB 儲存器連接狀態的信號,我使用該org.freedesktop.UDisks2
服務。這很好用,但我找不到任何帶有“可用磁碟空間”資訊的屬性。
我是否需要為此功能使用其他服務或如何獲取此資訊?目前我使用的是 Debian 系統,但在第一次測試後,我將切換到嵌入式busybox 系統(以防萬一此資訊很重要)。
Udisks 真正致力於處理儲存設備的硬體方面,直至安裝分區/卷。這些分區上有哪些文件系統,以及它們有多少可用空間,對於 Udisks2 來說有點超出了範圍。您可能使用 Udisk 掛載的某些文件系統甚至不理解“可用空間”的概念(如 ISO9669)
從我的頭上看,通過對可用 DBUS 介面的一些研究,我認為 DBUS 不會有“可用空間”屬性。好吧,hacky 但有效的解決方法只是 execing
df /path/to/mount
。(許多文件系統需要掛載,即使只是只讀的,以估計可用空間的數量。順便說一下,對於許多文件系統來說,可用空間和使用的空間是一件非常複雜的事情。)現在,特別是如果您稍後將其縮小為基於busybox的最小系統,您可能不想使用GNU coreutil
df
執行來讀取您需要從文本中解析的內容,只是為了獲取您自己可以獲得的資訊. 看到你在做 C++(我的頭腦,甚至沒有嘗試編譯它),並假設你沒有 C++17’sstd::filesystem::space
,這當然比使用 DBUS 開始時更容易:#include <sys/statvfs.h> std::string mountpoint; /* * Get the mount point using org.freedesktop.UDisks2.Filesystem's "MountPoints" property, see * http://storaged.org/doc/udisks2-api/latest/gdbus-org.freedesktop.UDisks2.Filesystem.html#gdbus-property-org-freedesktop-UDisks2-Filesystem.MountPoints * We'll act as if you already did this and it was stored in `mountpoint`. */ // Terrible naming choices made the structure typename be the same as the function name, so even in C++ we have to use `struct`. Wah. struct statvfs filesystem_info; statvfs(mountpoint.c_str(), &filesystem_info); auto bytes_per_block = filesystem_info.f_bsize; auto blocks_free_for_unprivileged_users = filesystem_info.f_bavail; auto blocks_free_total = filesystem_info.f_bfree;