空洞文件原理详解

时间 : 19-01-15 栏目 : 性能优化 作者 : 老薛 评论 : 0 点击 : 88 次

1.什么是空洞文件?

“在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被设为 0。”    

2.怎么获得一个空洞文件?

在Linux下,利用lseek人为的修改offset可以获得一个空洞文件。

c代码附在文章底部)

3.空洞文件的表现

首先明白两点:

①  空洞文件特点就是offset大于实际大小,也就是说一个文件的两头有数据而中间为空,以‘\0‘填充。

        ② ll与du命令展的不同之处:

            ll: 展现的文件的逻辑大小,也就是文件在文件系统表现出来的大小

            du:展现的是文件在磁盘上实际所占的block数。

所以说,空洞文件在文件系统表现的还是和普通文件一样的,但是实际上文件系统并没有给他分配所表现出来的那么多空间,只是存放了有用的信息。

这也是为什么ll 两个文件大小是相等的,而du两个文件大小是不同的!!

下面我就来验证一下:

此图为生成空洞文件hole.fnohole.f




此图为ll du 查看空洞文件与正常文件的区别

4.空洞文件有什么用?

         例如:迅雷下载文件时,在未下载完成时就已经占据了全部文件大小的空间,这时候就是空洞文件。下载的时候如果没有空洞文件,多线程下载时文件就都只能从一个地方写入,这就不是多线程了。如果有了空洞文件,可以从不同的地址写入,就完成了多线程的优势任务。

附:生成文件(hole.fnohole.f)脚本代码参考


本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/performance/2726.html

空洞文件原理详解:等您坐沙发呢!

发表评论

0 + 3 = ?


博主微信号,很高兴为您提供帮助

随便看看

0