2013-02-20 209 views
1

如果我做了一個「雙重問題」,但我不想分開這兩個,我很抱歉:)任何人都不知道TMPFS_MAGIC的值是0x01021994對於?它是在/usr/include/linux/magic.h定義和我發現它在運行下面的代碼,其嘗試確定在linux目錄中的可用空間(通常是一個分區):從gdb命令提示TMPFS_MAGIC在linux標題和錯誤,確定可用磁盤空間

QString path = "/dev/sde1"; 
struct stat stst; 
struct statfs stfs; 

if (::stat(path.toLocal8Bit(), &stst) == -1) 
{ 
    return 0.0; 
} 

if (::statfs(path.toLocal8Bit(), &stfs) == -1) 
{ 
    return 0.0; 
} 

return m_diskFree = stfs.f_bavail * (stst.st_blksize/1024); 

(gdb) print stfs 
$1 = {f_type = 16914836, f_bsize = 4096, f_blocks = 2042909, f_bfree = 2042907, f_bavail = 2042907, f_files = 2042909, f_ffree = 2042267, f_fsid = {__val = {0, 0}}, f_namelen = 255, f_frsize = 4096, f_flags = 4128, f_spare = {0, 
0, 0, 0}} 

其中f_type = 16914836是上面的魔法。爲了您的信息,「/ dev/sde1」是一個外部驅動器,其上有一個NTFS分區。

而且上面的代碼對於安裝在Linux系統上的NTFS分區無法正常工作(它適用於ext * fs文件系統),所以我問:您是否知道正確地找到掛載的NTFS驅動器的可用空間Linux主機? linux命令df似乎正確地完成了這項工作,但我沒有找到正確的方法來做到這一點(但......)。

謝謝,F。

回答

0

所以,一些調試和不眠之夜後,該解決方案是非常簡單的。找到df.c的源代碼並閱讀它。萬歲免費和開源的代碼。

解釋:當你使用stat和statfs來查找硬盤上的可用空間時,你不會試圖找到設備本身的可用空間,因爲這是魔術......但是,你試圖找到設備安裝目錄的可用空間。所以,與其

QString path = "/dev/sde1"; 

應該有

QString path = "/mnt/DISK"; 

其中"mnt/DISK"是所在的磁盤"/dev/sde1"安裝的目錄。我已經使用libext2fs找到磁盤的安裝點,但我相信還有其他更好的解決方案,它找出來,比如解析/etc/mtab