| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1441 人关注过本帖
标题:类Unix系统中获取文件磁盘占用空间的问题
取消只看楼主 加入收藏
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
类Unix系统中获取文件磁盘占用空间的问题
注意,不是获取文件大小,而是占用磁盘空间的大小。
例如我的~/.bash_profile文件,文件大小为238个字节,磁盘占用为4KB。

我使用了stat函数来获取文件信息,代码如下:
#include <stdio.h>
#include <sys/stat.h>

int main(int argc, const char *argv[]) {
    struct stat statbuff;
    stat("/Users/XX/.bash_profile", &statbuff);
    printf("filesize = %lld, block = %lld, blocksize = %d\n", statbuff.st_size, statbuff.st_blocks, statbuff.st_blksize);

    return 0;
}

编译后运行的结果为:
filesize = 238, block = 8, blocksize = 4096
意思是,文件大小为238个字节,占用了8个块,每个块的大小为4096个字节
如果按照这个数据来计算,文件的磁盘占用应该为 8 * 4096 = 32KB

但是使用du -h ~/.bash_profile命令得到的结果是:
4.0K    /Users/XX/.bash_profile

不知道哪里出了问题,诚心向大家请教~



[此贴子已经被作者于2016-11-23 18:43编辑过]

搜索更多相关主题的帖子: include return Users 空间 信息 
2016-11-23 18:31
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
收藏
得分:0 
谢谢两位版主。

其实道理也明白,就是一直疑惑到底该使用哪个参数来进行运算。

这是另一个文件的提示信息,其磁盘占用为16KB:
filesize = 14995, block = 32, blocksize = 4096

可以看出512这个值并不能根据stat函数返回的结果计算出来
一个block确定就是512字节这个常量吗?会不会因为磁盘容量大小、分区格式不同而变化呢?手上也没有多余的盘拿来验证

至于4096这个值,是IO一次读取的大小,那么这个值能不能在系统中设置(比如设置成8192)?如果设置了,会不会影响文件磁盘占用呢?(个人觉得不会,因为其它文件的磁盘占用是定了的)

[此贴子已经被作者于2016-11-24 14:05编辑过]

2016-11-24 14:02
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
收藏
得分:0 
又去翻查了一下资料,基本上确认了stat结构体中的st_blocks就是指扇区数量,HFS+每个扇区的大小为512个字节,因此最简单的计算方法就是st_blocks * 512。

下面是资料来源:
http://baike.baidu.com/link?url=FEiCQBLRG-4zdpZXATDKNh-IEIKcybYxyFi6iWk2PpdfpJR7D31TqhM-xCJuIbGqDPGXY51l_hdtKHO1j_8Lk_
http://blog.
2016-11-24 14:21
快速回复:类Unix系统中获取文件磁盘占用空间的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017090 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved