首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >statvfs问题- printf / debugger

statvfs问题- printf / debugger
EN

Stack Overflow用户
提问于 2011-01-12 00:28:57
回答 1查看 660关注 0票数 3

我正在尝试使用statvfs来查找文件系统上的可用空间。

代码如下:

代码语言:javascript
复制
const char* Connection::getDiskInfo()
{
struct statvfs vfs;
int nRet = statvfs( "/u0", &vfs );
if( nRet ) return NULL;

char* pOut = (char*)malloc( 256 );
memset( pOut, 0, 256 );

sprintf( pOut, "<disk letter='%s' total='%lu' free='%lu' totalfree='%lu'/>",
    "/", ( vfs.f_bsize * vfs.f_blocks ) / ( 1024 * 1024 ),
    ( vfs.f_bsize * vfs.f_bavail ) / ( 1024 * 1024 ),
    ( vfs.f_bsize * vfs.f_bfree  ) / ( 1024 * 1024 ));

return pOut;
}

在调试器(NetBeans 6.9)中,我看到了statvfs结构的相应值:

代码语言:javascript
复制
f_bavail = 105811542
f_bfree = 111586082
f_blocks = 111873644
f_bsize = 4096

这应该会给我total=437006,但是我的输出坚持total=2830。很明显,我在格式化或数学方面做了一些愚蠢的事情。

如果我添加这一行:

代码语言:javascript
复制
unsigned long x = ( vfs.f_bsize * vfs.f_blocks );

当调试器向我显示适当的值时,X的计算结果为2967912448 (参见上文)。

系统: Linux版本2.6.18-194.17.1.el5PAE

i386

我已经阅读了这里提到这个函数的其他条目,它们使它看起来非常简单。那么,我在哪里误入歧途?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-12 00:45:03

fsblkcnt_t的大小是多少?如果它是32位的,那么它就是一个溢出问题,你只需要在计算过程中暂时使用64位的大小。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4659939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档