什么是空洞文件?

空洞文件(hole file)

我们知道 lseek()系统调用,使用 lseek 可以修改文件的当前读写位置偏移量,此函数不但可以改变位置偏移量,并且还允许文件偏移量超出文件长度,这是什么意思呢?譬如有一个 test_file,该文件的大小是 4K(也就是 4096 个字节),如果通过 lseek 系统调用将该文件的读写偏移量移动到偏移文件头部 6000 个字节处,大家想一想会怎样?但事实上 lseek 函数确实可以这样操作。

接下来使用 write()函数对文件进行写入操作,也就是说此时将是从偏移文件头部 6000 个字节处开始写入数据,也就意味着 4096~6000 字节之间出现了一个空洞,因为这部分空间并没有写入任何数据,所以形成了空洞,这部分区域就被称为文件空洞,那么相应的该文件也被称为空洞文件。文件空洞部分实际上并不会占用任何物理空间,直到在某个时刻对空洞部分进行写入数据时才会为它分配对应的空间,但是空洞文件形成时,逻辑上该文件的大小是包含了空洞部分的大小的,这点需要注意。

空洞文件有什么用呢?空洞文件对多线程共同操作文件是及其有用的,有时候我们创建一个很大的文件,如果单个线程从头开始依次构建该文件需要很长的时间,有一种思路就是将文件分为多段,然后使用多线程来操作,每个线程负责其中一段数据的写入;这个有点像我们现实生活当中施工队修路的感觉,比如说修建一条高速公路,单个施工队修筑会很慢,这个时候可以安排多个施工队,每一个施工队负责修建其中一段,最后将他们连接起来。

来看一下实际中空洞文件的两个应用场景:

⚫ 在使用迅雷下载文件时,还未下载完成,就发现该文件已经占据了全部文件大小的空间,这也是空洞文件;下载时如果没有空洞文件,多线程下载时文件就只能从一个地方写入,这就不能发挥多线程的作用了;如果有了空洞文件,可以从不同的地址同时写入,就达到了多线程的优势;

⚫ 在创建虚拟机时,你给虚拟机分配了 100G 的磁盘空间,但其实系统安装完成之后,开始也不过只用了 3、4G 的磁盘空间,如果一开始就把 100G 分配出去,资源是很大的浪费。

·················· END ··················

本文分享自微信公众号 - 嵌入式Linux系统开发(Jason_Linux_),作者:Jasonangel

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ink是什么文件 什么是ink文件

    ink是什么文件?ink文件是用于指向其他文件的一种文件,这些文件通常称为快捷方式文件,通常它以快捷方式放在硬盘上,以方便使用者快速的调用。

    用户8052652
  • 文件空间映射mmap()函数(是什么,为什么,怎么用)

    1、mmap()函数用来将文件或者设备映射到内存中。 2、mmap的特点是按需调页。最开始只申请vma,并不调真正的页。当对某些页进行引用的时候,会引起一个缺...

    看、未来
  • dmg是什么文件

    一般下载安装包后有dmg和exe两种格式,因为现在主流就是windows和Mac,所以经常封装到一起。

    小蓝枣
  • setup.py文件是什么

    在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“python setup.py install”,前者是在线安装,会安...

    神秘的寇先森
  • 什么是.pyc文件

    Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。

    狼啸风云
  • hosts文件是什么?hosts文件有什么作用?

    对网络比较熟悉的朋友应该都知道hosts文件,在windows系统中和手机中,hosts文件有非常多的作用,但是具体来说有哪些作用呢?很多人却并不清楚,下面来为...

    用户8715145
  • hosts文件是什么?有什么用?

    先将C:\Windows\System32\drivers\etc目录下的Hosts文件,

    简单并不简单
  • Java .class文件是什么?

    java class 文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java类或者Java接口做出了全面描述。一个cla...

    MickyInvQ
  • 什么是文件格式?

    有了之前 4 篇对文件的操作工具之后,终于到了文件格式的介绍部分!本文介绍文件格式的定义,并实现一个自己的文件格式。这个文件格式十分简单,只用来说明原理。

    Apache IoTDB
  • 什么是0day漏洞

    在计算机领域中,0day通常是指还没有补丁的漏洞。也就是说官方还没有发现或者是发现了还没有开发出安全补丁的漏洞,比如苹果的越狱插件都是利用0day漏洞的。所以越...

    C4rpeDime
  • 为什么要用空洞卷积?

    空洞卷积(atrous convolutions),又称扩张卷积(dilated convolutions),向卷积层引入了一个成为“扩张率(dilated r...

    智能算法
  • Python 的 RST 文件是什么

    reStructuredText ( RST 、 ReST 或 reST )是一种用于文本数据的文件格式,主要用于 Python 编程语言社区的技术文档。

    HoneyMoose
  • dat文件用什么软件打开?它是什么类型的文件?

    在我们的生活中电脑的使用率非常高,不管是工作还是办公都能看到它的身影。我们知道电脑有专门的运用统,不管是文件、音频一些手机上不能打开的都能在电脑打开,电脑上关于...

    用户8739990
  • 为什么你的话题爬虫 topic 文件夹总是空的

    其实程序一运行起来,没有在控制台打印出每一页微博的具体信息,就可以断定你的操作方式出了问题,不必等上十几二十分钟。

    月小水长
  • 什么是框架?| 洞见

    In computer programming, a software framework is an abstraction in which softwar...

    ThoughtWorks
  • .DS_store ( Desktop Services Store) 文件是什么?

    .DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义...

    一个会写诗的程序员
  • 什么是服务器?什么是虚拟主机空间?

    上面我们讲了各种服务器知识,至于什么是服务器,什么是虚拟主机空间,相信很多朋友还是很模糊的,接下来服务器租用(主机吧)我就给大家介绍一下服务器与虚拟主机空间的区...

    用户6049522
  • C++_什么是命名空间

    命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开...

    瑞新
  • 域名空间是什么 它有什么作用

    当商人与客户交易时,经常会听到域名空间这个词,那么它到底是什么?其实从它的名字上来看好像是一个空间,其实不然,接下来就介绍一下域名空间。

    用户8739990

扫码关注云+社区

领取腾讯云代金券