1

「二重の質問」をして申し訳ありませんが、これら2つを分けたくありません:) ひょっとしTMPFS_MAGICて、値を持つものが何0x01021994に使用されるか知っている人はいますか? これはで定義されて/usr/include/linux/magic.hおり、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 コマンド プロンプトから:

(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 ファイル システムでは機能します)。Linuxコマンドdfは正しく機能しているように見えますが、正しい方法を見つけることができませんでした(まだ...)。

ありがとう。

4

1 に答える 1

0

したがって、デバッグと眠れぬ夜の後、解決策は非常に簡単でした。df.c のソースを見つけて読んでください。フリーでオープンソースのコード万歳。

そして説明: stat と statfs を使用してハードディスクの空き容量を見つける場合、デバイス自体の空き容量を見つけようとはしません。それは魔法だからです... しかし、空き容量を見つけようとしますデバイスがマウントされているディレクトリの。だから、代わりに

QString path = "/dev/sde1";

あるはずです

QString path = "/mnt/DISK";

where"mnt/DISK"は、ディスク"/dev/sde1"がマウントされているディレクトリです。ディスクのマウントポイントを見つけるために使用libext2fsしましたが、解析など、それを見つけるための他のより良い解決策があると確信しています/etc/mtab

于 2013-03-02T22:03:14.593 に答える