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.hqwc.cn/news/73556.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Linux Docker springboot jar 日志时间不正确 问题解决

使用Springboot项目的jar&#xff0c;制作了一个Docker镜像&#xff0c;启动该镜像后发现容器和容器中的Springboot 项目的日志时间不正确。 解决 查看容器时间命令为&#xff1a; docker exec 容器id date 1. 容器与宿主机同步时间 在启动镜像时候把操作系统的时间通过&q…

爬虫逆向实战(八)--猿人学第十五题

一、数据接口分析 主页地址&#xff1a;猿人学第十五题 1、抓包 通过抓包可以发现数据接口是api/match/15 2、判断是否有加密参数 请求参数是否加密&#xff1f; 查看“载荷”模块可以发现有一个m加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无cook…

汽车领域专业术语

1. DMS/OMS/RMS/IMS DMS&#xff1a;即Driver Monitoring System&#xff0c;监测对象为Driver&#xff08;驾驶员&#xff09;。DMS三大核心&#xff1a; OMS&#xff1a;即Occupancy Monitoring System&#xff0c;监测对象为乘客。 RMS&#xff1a;后排盲区检测系统 IMS&…

【【Verilog典型电路设计之FIFO设计】】

典型电路设计之FIFO设计 FIFO (First In First Out&#xff09;是一种先进先出的数据缓存器&#xff0c;通常用于接口电路的数据缓存。与普通存储器的区别是没有外部读写地址线&#xff0c;可以使用两个时钟分别进行写和读操作。FIFO只能顺序写入数据和顺序读出数据&#xff0…

N4010A|安捷伦Agilent N4010A蓝牙测试仪

描述 N4010A是一款多功能多格式无线连接测试解决方案&#xff0c;您可以针对R&D、集成和验证或制造中的特定蓝牙、无线局域网(WLAN) 802.11a、b和g以及ZigBee应用进行配置。 特征 测试多种技术的灵活性通过快速、准确的测量提高生产量从开发到生产的可重复测量结果适应新…

Excelize Go语言操作 Office Excel文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

windows权限维持—SSPHOOKDSRMSIDhistorySkeletonKey

windows权限维持—SSP&HOOK&DSRM&SIDhistory&SkeletonKey 1. 权限维持介绍1.1. 其他 2. 基于验证DLL加载—SPP2.1. 操作演示—临时生效2.1.1. 执行命令2.1.2. 切换用户 2.2. 操作演示—永久生效2.2.1. 上传文件2.2.2. 执行命令2.2.3. 重启生效 2.3. 总结 3. 基…

论文阅读——Imperceptible Adversarial Attack via Invertible Neural Networks

Imperceptible Adversarial Attack via Invertible Neural Networks 作者&#xff1a;Zihan Chen, Ziyue Wang, Junjie Huang*, Wentao Zhao, Xiao Liu, Dejian Guan 解决的问题&#xff1a;虽然视觉不可感知性是对抗性示例的理想特性&#xff0c;但传统的对抗性攻击仍然会产…

调整数组使奇数全部都位于偶数前面

题目内容&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 题目思路&#xff1a; 将奇数部分放在前半部分&#xff0c;偶数部分放在后半部分&am…

excel中定位条件,excel中有哪些数据类型、excel常见错误值、查找与替换

一、如何定位条件 操作步骤&#xff1a;开始 - 查找和选择 - 定位条件&#xff08;ctrl G 或 F5&#xff09; 注&#xff1a;如果F5不可用&#xff0c;可能是这个快捷键被占用了 案例&#xff1a;使用定位条件选择取余中空单元格&#xff0c;填入100&#xff0c;按组合键ct…

Java算法_ 验证二叉搜索树(LeetCode_Hot100)

题目描述&#xff1a; 给你一个二叉树的根节点 &#xff0c;判断其是否是一个有效的二叉搜索树。root 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 获得…

【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~

Maven入门介绍篇 1️⃣ 基础概念1.1 构建1.2 maven对构建的支持1.3 Maven的其他作用 2️⃣ 其他构建工具2.1 IDE2.2 Make2.3 Ant2.4 Jenkins 3️⃣ Maven与敏捷开发&#x1f33e; 总结 1️⃣ 基础概念 "Maven"可以翻译为 “知识的积累者” 或 “专家”。这个词源于波…