文件空洞的作用

在共享内存时候有用到,共享内存的机制是两个进程都调用mmap函数,然后将同一个文件fd映射到各自虚拟内存中,虽然这两个进程有各自的映射内存,但是这两个虚拟内存对应的是同一块物理内存,这才实现了共享内存。

 

当两个文件需要共享内存的时候,由于不知道需要共享内存的大小,所以需要在文件创建后之后设置文件的大小,这时就需要用到空洞文件了。一开始文件的大小为0,如果要设置文件的大小为filesize,那么这时就可以调用lseek函数来设置。

lseek(fd, filesize - 1, SEEK_SET);
write(fd, "", 1);

先调用lseek定位到最后一个字符,然后写一个空字符,这时[0, filesize - 2]范围内都是0,这就是一个空洞文件,文件大小为filesize。

 

文件空洞的作用二:

 

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

 

在开发过程中有时候需要为某个文件迅速地分配固定大小的磁盘空间

1.可以让文件尽可能的占用连续的磁盘扇区,减少后续写入和读取文件时的磁盘寻道开销;

2.迅速占用磁盘空间,防止使用过程中所需要空间不足;

3.后面追加数据的话,不会需要改变文件大小,所以后面将不涉及metadata的修改。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值