空洞文件作用

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include<stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    
    int fd = open("1.txt", O_RDWR | O_CREAT | O_TRUNC,0777); 
    if (fd == -1) 
    { 
        perror("open error"); 
        return -1; 
    } 
    write(fd,"XXX",3);
    int n = lseek(fd,10*1024,SEEK_SET);
    printf("n=%d\n",n);

    write(fd,"xxx",3);
    
     /* 关闭文件 */ 
    close(fd); 
    return 0;
} 

作用:
​    一、在共享内存的时候有用到.共享内存的机制是两个进程都调用mmap函数,然后将同一个文件fd映射到各自的虚拟内存中,虽然这两个进程有各自的映射内存,但是这两个虚拟内存对应的是同一块物理内存,这才实现了共享内存.
当两个文件需要共享内存时,由于不知道需要共享内存的大小,所以需要在文件创建好之后来设置文件的大小.这时就需要用到空洞文件了.一开始文件的大小为0,如果要设置文件的大小为filesize,那么这时就可以调用lseek函数来设置
​    二、在开发过程中有时候需要为某个文件迅速地分配固定大小的磁盘空间
1. 可以让文件尽可能的占用连续的磁盘扇区,减少后续写入和读取文件时的磁盘寻道开销;
2. 迅速占用磁盘空间,防止使用过程中所需要空间不足;
3. 后面追加数据的话,不会需要改变文件大小,所以后面将部设计metadata的修改.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值