当前位置: 首页 > news >正文

Linux0.11内核源码解析-truncate.c

truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0,并释放占用的设备空间。

索引节点的逻辑块连接方式

 

释放一次间接块

static void free_ind(int dev,int block)
{struct buffer_head * bh;unsigned short * p;int i;if (!block)return;//读取一次间接块,并释放其上表明使用的所有逻辑块,然后释放该一次间接块的缓冲区if ((bh=bread(dev,block))) {p = (unsigned short *) bh->b_data; //指向数据缓冲区for (i=0;i<512;i++,p++) //每个逻辑块上有512块号if (*p)free_block(dev,*p); //释放指定逻辑块brelse(bh);}free_block(dev,block);
}

释放二次间接块

static void free_dind(int dev,int block)
{struct buffer_head * bh;unsigned short * p;int i;if (!block)return;//读取二次间接块的一级块,并释放其上表明使用的所有逻辑块,然后释放该一级块的缓冲区if ((bh=bread(dev,block))) {p = (unsigned short *) bh->b_data;for (i=0;i<512;i++,p++) //每个逻辑块可连接512个二级块if (*p)free_ind(dev,*p);brelse(bh);}free_block(dev,block);
}

将节点对应的文件长度截0,并释放占用的设备空间

void truncate(struct m_inode * inode)
{int i;if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))return;//释放i节点的7个直接逻辑块,并将这7个逻辑块项全置为0for (i=0;i<7;i++)if (inode->i_zone[i]) {free_block(inode->i_dev,inode->i_zone[i]);inode->i_zone[i]=0;}//释放一次间接块free_ind(inode->i_dev,inode->i_zone[7]);//释放二次间接块free_dind(inode->i_dev,inode->i_zone[8]);inode->i_zone[7] = inode->i_zone[8] = 0;inode->i_size = 0;inode->i_dirt = 1;inode->i_mtime = inode->i_ctime = CURRENT_TIME;
}

http://www.lryc.cn/news/130771.html

相关文章:

  • LED驱动型IC芯片的原理介绍
  • VLAN实验
  • Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit
  • 三维可视化平台有哪些?Sovit3D可视化平台怎么样?
  • Xxl-job安装部署以及SpringBoot集成Xxl-job使用
  • 【【超声波避障小车代码】】
  • TDI(Time Delay Integration)
  • RHCE——一、安装部署及例行性工作
  • 服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式
  • 期权就是股指期货吗,哪个好做一点?
  • week32
  • 【数据库】P1 数据库基本常识
  • c语言——计算两个数的乘积
  • 单机模型并行最佳实践
  • 编程练习(3)
  • PyTorch学习笔记(十三)——现有网络模型的使用及修改
  • Python爬虫的scrapy的学习(学习于b站尚硅谷)
  • “深入解析JVM:揭秘Java虚拟机的工作原理“
  • 【数据结构与算法】十大经典排序算法-归并排序
  • 基于深度学习创建-表情符号--附源码
  • .netcore grpc的proto文件字段详解
  • 带你了解建堆的时间复杂度
  • 人工智能原理(6)
  • 单片机模块化编程文件创建流程
  • docker image
  • 力扣75——单调栈
  • Webpack和Parcel详解
  • linux系统服务学习(六)FTP服务学习
  • 7.原 型
  • 【图像分类】理论篇(2)经典卷积神经网络 Lenet~Resenet