Linux操作系统中文件结构stat中st_size的说明以及对于文件中洞(Holes)的理解

文件stat结构体中st_size成员

  对于所有的文件类型,st_size成员对其中的普通文件、目录以及符号链接有实在的意义。其中,对于普通文件而言,st_size记录了该文件的实际大小;对于目录而言,st_size的值为16或者512的倍数;对于符号链接而言,st_size的值为符号链接所指的路径的长度。例如lib->usr/lib,则st_size的值即为7。

  在某些Unix系统中,st_size的值对pipe等文件也有意义,表示当前pipe中可以读取的字节数。

Holes产生的原因

  当我们使用lseek函数,在超出文件的原文件尾的某个位置处开始写入字节时,为了节省磁盘空间,它们之间未被写入数据的空间并未被文件系统完全分配。这个时候,就会造成文件的大小,与文件所占用的磁盘空间产生大小不一致的情况。我们使用ls -l命令可以看到文件的大小。而使用du -s查看文件的磁盘占用时,就会发现他们存在着不一致的情况,有兴趣的读者可以自己在Linux下面进行试验。

  如果我们在hole中的某个位置使用read函数进行读操作时,函数会返回0。

  需要注意的一点是,当我们使用cat指令复制带有hole的文件时,复制得到的文件中,这些hole会被0所填充,使文件的磁盘占用空间与其实际大小相匹配。


作者:Chenny Chen 
出处:http://www.cnblogs.com/XjChenny/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 转载:http://www.cnblogs.com/XjChenny/archive/2012/12/10/2811995.html 

 
posted @ 2016-08-05 22:01  极客先锋  阅读(3396)  评论(0编辑  收藏  举报