• 6070阅读
  • 1回复

[提问]请问有关QFile的resize函数的问题。 [复制链接]

上一主题 下一主题
离线tcg1983
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-31
环境:ubuntu 8.04,ext2文件系统。
要做一个存储池模块,需要在初始化的时候分配好定长的文件,比如每个文件为1G,则1T硬盘,可分配900多个文件。
如果用fwrite ()对每个文件进行一点一点写也是可以的,而且能保证磁盘上文件内部基本没有碎片是连续的。但这样创建文件太慢了。刚才用Qt的QFile的resize试了下,马上就创建好了所有文件,很快。但我发现其实磁盘上的扇区没有被文件真正占用,也就是说,磁盘的使用率和resize事前的情况是一样的,使用df 查看。只是在ls -l查看文件属性的时候发现,这个文件的长度是1G的大小
我的问题是:resize的原理是什么,当我真正往这个文件写数据的时候,分配的磁盘扇区会连续的吗?

请各位大哥帮忙解答下,O(∩_∩)O谢谢。
离线tcg1983

只看该作者 1楼 发表于: 2011-03-31
自己解决了,自己解答下吧。
resize用的是文件洞的形式,文件洞只有在真正需要向文件写数据的时候才向磁盘获取一个块。所以为什么创建几个G的文件的时候非常快,因为根本没往磁盘里写大量的数据,。
由于真正向文件写数据的时候才向磁盘获取一个块,所以获取的新块是随机的,并不连续。
快速回复
限100 字节
 
上一个 下一个