• 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Dijkstra-leetcode 743.网络延迟时间
    BFS-leetcode787 K站中转内最便宜的航班
    图论基础——单源最短路径问题
    DFS leetcode-547 朋友圈
    SpringBoot 使用注解向容器中注册Bean的方法总结
    SpringBoot对SpringMVC的支持
    数据源简介
    Spring MVC简介
    2020-2-10 Python 列表切片陷阱:引用、复制与深复制
    2020-2-2 语法糖
  • 原文地址:https://www.cnblogs.com/XjChenny/p/2811995.html
Copyright © 2020-2023  润新知