gpt4 book ai didi

c++ - Statfs 返回奇怪的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:37 25 4
gpt4 key购买 nike

我目前正在尝试使用 statfs() 以字节为单位获取磁盘空间和以字节为单位的已用空间。我做了一个小函数,但我得到了非常奇怪的值。(我在 ubuntu 32 位系统上工作)

代码如下:

bool
CheckDiskSpace( const CLString &devPath, ulonglong &diskSize, ulonglong &totalFreeBytes )
{
bool retVal = false;
struct statfs fs;
if( ( statfs( devPath.c_str(), &fs ) ) < 0 ) {
printf( "Failed to stat %s: %s\n", devPath.c_str() ,strerror( errno ) );
return false;
} else {
diskSize = fs.f_blocks * fs.f_bsize;
totalFreeBytes = fs.f_bfree * fs.f_bsize;
retVal = true;
}
return retVal;
}

int main()
{
ulonglong diskSize, totalFreeBytes;
CheckDiskSpace( "/dev/sda5", diskSize, totalFreeBytes );
printf( "Disk size: %llu Byte\n", diskSize );
printf( "Free size: %llu Byte\n", totalFreeBytes );
}

然后我得到:

Disk size: 1798447104 Byte
Free size: 1798443008 Byte

我真的不明白这个结果,因为使用“df”命令我得到:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5 111148848 47454952 58047832 45% /
udev 1756296 4 1756292 1% /dev
tmpfs 705324 912 704412 1% /run
none 5120 0 5120 0% /run/lock
none 1763300 1460 1761840 1% /run/shm

非常感谢任何帮助!

PS:我有一个 120 GB 的 ssd,我的分区是 Ext4。

编辑:ulonglong 是预定义类型:

typedef unsigned long long ulonglong;

最佳答案

您正在获取安装在 /dev 上的 tmpfs 的结果,因为 /dev/sda5 位于该文件系统上。如果您想知道您的根文件系统,只需使用 / 或不在 /dev/run 中的任何路径。

关于c++ - Statfs 返回奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com