【问题标题】:TMPFS_MAGIC in linux header and error determining the free disk spacelinux标头中的TMPFS_MAGIC和确定可用磁盘空间的错误
【发布时间】:2013-02-05 04:49:14
【问题描述】:

如果我提出“双重问题”,我很抱歉,但我不想将这两个分开:) 有没有人知道 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 上的 NTFS 驱动器的可用空间吗主机? linux 命令df 似乎正确地完成了这项工作,但我没有设法找到正确的方法来完成它(但是......)。

谢谢你。

【问题讨论】:

    标签: c linux disk


    【解决方案1】:

    因此,经过一些调试和不眠之夜,解决方案非常简单。找到 df.c 的源代码并阅读它。免费和开源代码万岁。

    以及解释:当你使用 stat 和 statfs 来查找硬盘上的空闲空间时,你不要试图找到设备本身的空闲空间,因为那很神奇......但是,你试图找到安装设备的目录的可用空间。所以,而不是

    QString path = "/dev/sde1";
    

    应该有

    QString path = "/mnt/DISK";
    

    其中"mnt/DISK" 是安装磁盘"/dev/sde1" 的目录。我已经使用libext2fs查找磁盘的挂载点,但我相信还有其他更好的解决方案可以找到它,例如解析/etc/mtab

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2010-09-27
      • 2018-07-06
      相关资源
      最近更新 更多