zoukankan      html  css  js  c++  java
  • Unix系统编程()文件空洞

    如果程序的文件偏移量已然跨越了文件结尾,然后再执行IO操作,将会发生什么情况?

    read调用将会返回0,表示文件结尾。令人惊讶的是,write函数可以在文件结尾后的任意位置写入数据。

    从文件结尾后到新写入数据的这段空间被称为文件空洞。

    从编程的角度来看,文件空洞是存在字节的,读取空洞将返回以0(空字节)填充的缓冲区。

    然而,文件空洞不占用任何磁盘空间。知道后续某个时间点,在文件空洞中写入了数据,文件系统才会为之分配磁盘块。

    文件空洞的优势在于,与为实际需要的空字节分配磁盘块相比,稀疏的填充文件会占用较少的磁盘空间。

    核心转储文件(core dump)是包含文件空洞常见的例子。

    对于文件空洞不占用磁盘空间的说法要稍微限定一下。在大多数的文件系统中,文件空间的分配是以块为单位的。块的大小取决于文件系统,通常是1024字节,2048字节,4096字节。如果空洞的边界落在块内,而非恰好落在块边界上,则会分配一个完整的块来存储数据,块中与空洞相关的部分则以空字节填充。

    不支持文件空洞的文件系统会显式地将空字节写入文件。

    空洞的存在意味着一个文件名义上的大小可能要比其占用的磁盘存储总量要大。

    向文件空洞中写入字节,内核需要为其分配存储单元,即使文件大小不变,系统的可用磁盘空间也将减少。

    不太理解的是空洞落在块内和落在块的边界上,我倒是理解了,但是不知道对不对。

  • 相关阅读:
    登陆界面
    信号和槽
    线程同步
    java script简介
    css粘性定位sticky的使用
    vue中使用qrcodejs2生成二维码
    webpack基本使用
    总结一些h5出现的问题及解决方案
    srcset属性配合w宽度描述符配合sizes属性
    vw实现页面布局
  • 原文地址:https://www.cnblogs.com/tuhooo/p/8642039.html
Copyright © 2011-2022 走看看