笔记整理—内核!启动!—linux应用编程、网络编程部分(2)linux的文件管理策略

        关于硬盘中的静态文件与inode:例如文件存储在扇区中,一个文件占用10个字节,一个扇区为512字节,这样的情况下一个扇区就只放了一个实际为10字节的文件,余下的502字节不可存放其他文件,因为扇区已经是可以访问的最小单位了。

        所以,为了能够去索引到需要的文件,就有了硬盘中的索引表,如果表被破坏,文件就找不到了。

        

        这个表项就是inode,i节点,每个节点就是一个相关信息,每一个文件一个inode,一个inode就是一个结构体,一数字作为编号,通过遍历去寻找节点。

         格式化一般分为快速格式化和底层格式化。快速格式化,只是对表项进行删除没这样就找不到内容了,但本质上内容还在,能够被找回硬件的信息,但一般只能回复已知的格式的内容。底层格式化,就不单单只删除表项,删除的东西能恢复,但成本会很高。

        内存中被打开的文件与vnode(v节点):程序中打开的文件就属于这个进程,一个进程就有一个相应的数据结构(进程信息表),表中有一项指针,指向文件管理表,记录打开的文件与相关信息,表中信息打开的inode就是文件的fd,最终找到的文件管理结构体叫vnode。

        文件与流:流(stream)文件是一个栈(像一个栈)字符一个个读出、写入,形成流,是动态的,抽象出来的,文件操作时形成了IO流。

        

        文件指针:针对动态文件而言,在内存中以流的形式体现,文件流十分长,以何种心方式去体现位置,以文件指针表示在操作的位置,是文件管理表(结构体)中的一个指针。文件指针实际是vnode上的一个元素,表示了正在操作文件流的位置贸易lseek()函数进行间接访问。

        打开一个新问津默认打开lseek位置在开头write/read函数本会移动lseek指针,读n位就会移动n位。

        lseek也支持人为去改变文件的位置off_t lseek(int fd,off_t offset,int whence);offset为偏移量,whence为参照点(SEEK_SET文件头、SEEK_CUR当前位置、SEEK_END文件尾)。

        lseek返回成功的偏移量,read/write的读写位置受lseek操作。

        write写完内容时,lseek在尾部,所以这时候去read文件时,内容为空。

        用lseek计算文件的长度:linux中无api/函数去计算文件的长度,因为lseek可以做到这个功能。

ret=lseek(fd,0,SEEK_SET);将指针移到文件头
ret=lseek(fd,0,SEEK_END);计算从头到尾的长度
新打开一个文件,然后去计算从头到尾的偏移量

        使用lseek构建空洞文件,该文件没有字符(/t、/n都没有),用lseek去移动指针,写10个空洞字节,再写2字节的内容=12字节,空的文件是线程构建同一文件是有大用的。

        同一个进程多次(同时)打开同一个文件:

buf[20]={0};
fd1=open("a.txt",RDWR);
fd2=open("a.txt",RDWR);
ret1=read(fd1,buf,20);

memset(buf,0,sizeof(buf));
ret2=ret(fd2,buf,20);

结果fd1和fd2各自读各自的,lseek不是同一个,因为一个fd管理一个数据管理表。重复(同时)打开同一个文件进行写入,实际上是在内存中各写各的,最后写入硬盘时后者覆盖前者。

        接续写使用O_APPEND,核心还是lseek,移动自己的lseek时把另一个文件的lseek也给移动到相应的位置, O_APPEND对文件的操作是原子级别的,该操作不可被打断,原子操作是阻塞的,干不完活,后面的代码不会动。

       本章先写到这,下一章将对文件共享方面进行介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/881427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 | Scikit Learn中的普通最小二乘法和岭回归

在统计建模中,普通最小二乘法(OLS)和岭回归是两种广泛使用的线性回归分析技术。OLS是一种传统的方法,它通过最小化预测值和实际值之间的平方误差之和来找到数据的最佳拟合线。然而,OLS可以遭受高方差和过拟合时&#x…

基于PHP的电脑线上销售系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的电脑线上销售系…

【C语言】自定义类型——联合和枚举

目录 一、联合体(共用体) (1)联合体类型的声明 (2)联合体类型的特点 (3)联合体和结构体的比较 (4)联合体大小的计算 (5)联合体的…

RK3588/RK3588s运行yolov8达到27ms

前言 Hello,小伙伴们~~我最近做了一个比较有意思的东西,想起来也好久没有写博客了,就记录一下吧。希望和大家一起学习,一起进步! 我简单介绍一下我最近做的这个东西的经过哈~上个月在B站上看到了一个博主发了一条视频关…

Qt 模型视图(四):代理类QAbstractItemDelegate

文章目录 Qt 模型视图(四):代理类QAbstractItemDelegate1.基本概念1.1.使用现有代理1.2.一个简单的代理 2.提供编辑器3.向模型提交数据4.更新编辑器的几何图形5.编辑提示 Qt 模型视图(四):代理类QAbstractItemDelegate ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方…

Docker笔记-容器数据卷

Docker笔记-容器数据卷 docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器 之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像&#xf…

assign是赋值,不是连接

如下图是一个top文件的背压 如果把原本应该是外界输入的变量m_ip_hdr_ready通过phv_parser_hdr_ready来“赋值!!!”,那么模块内部本该有的ready信号,就会是Z高阻态,因为没有给到值。 正确的赋值 将整个模…

【医疗大数据】医疗保健领域的大数据管理:采用挑战和影响

选自期刊**《International Journal of Information Management》**(IF:21.0) 医疗保健领域的大数据管理:采用挑战和影响 1、研究背景 本研究的目标是调查阻止医疗机构实施成功大数据系统的组织障碍,识别和评估这些障碍,并为管理…

微信小程序拨打电话点取消报错“errMsg“:“makePhoneCall:fail cancel“

问题:微信小程序中拨打电话点取消,控制台报错"errMsg":"makePhoneCall:fail cancel" 解决方法:在后面加上catch就可以解决这个报错 wx.makePhoneCall({phoneNumber: 181********}).catch((e) > {console.log(e) //用…

调整pycharm中的字体大小

1.找到设置 2.打开setting ,按照图示操作即可

YOLOv5白皮书-第Y1周:调用官方权重进行检测

>- **🍨 本文为[🔗365天深度学习训练营](小团体~第八波) 中的学习记录博客** >- **🍖 原作者:[K同学啊](K同学啊-CSDN博客)** 一、前言 拖了好久,终于要开始目标检测系列了。自己想过好几次&#xf…

中秋节特别游戏:给玉兔投喂月饼

🖼️ 效果展示 📜 游戏背景 在中秋这个充满诗意的节日里,玉兔因为贪玩被赶下人间。在这个温柔的夜晚,我们希望通过一个小游戏,让玉兔感受到人间的温暖和关怀。🐰🌙 🎮 游戏设计 人…

Broadcast:Android中实现组件及进程间通信

目录 一,Broadcast和BroadcastReceiver 1,简介 2,广播使用 二,静态注册和动态注册 三,无序广播和有序广播 1,有序广播的使用 2,有序广播的截断 3,有序广播的信息传递 四&am…

[产品管理-15]:NPDP新产品开发 - 13 - 产品创新流程 - 具体产品的创新流程:精益生产与敏捷开发

目录 前言:​ 一、集成产品开发IPD模型——集成跨功能团队的产品开发 1.1 概述 1、IPD模型的核心思想 2、IPD模型的主要组成部分 3、IPD模型的实施步骤 4、IPD模型的优点 1.2 基于IPD系统的组织实践等级 1.3 IPD的优缺点 二、瀑布开发模型 1、定义与特点…

21、Tomato

难度 低(个人认为中) 目标 root权限 一个flag 使用VMware启动 kali 192.168.152.56 靶机 192.168.152.66 信息收集 端口信息收集 可以看到有个ftp服务,2211实际是ssh协议端口,80、8888是一个web服务 web测试 80端口显示一个tomato 查看源码给了一些…

opencv图像透视处理

引言 在图像处理与计算机视觉领域,透视变换(Perspective Transformation)是一种重要的图像校正技术,它允许我们根据图像中已知的四个点(通常是矩形的四个角)和目标位置的四个点,将图像从一个视…

软件安装攻略:EmEditor编辑器下载安装与使用

EmEditor是一款在Windows平台上运行的文字编辑程序。EmEditor以运作轻巧、敏捷而又功能强大、丰富著称,得到许多用户的好评。Windows内建的记事本程式由于功能太过单薄,所以有不少用户直接以EmEditor取代,emeditor是一个跨平台的文本编辑器&a…

聊城网站建设:企业如何打造高效官网

聊城网站建设:企业如何打造高效官网 在互联网飞速发展的今天,官方网站已成为企业展示形象、推广产品、与客户沟通的重要平台。尤其对于聊城地区的企业来说,建立一个高效的官网显得尤为重要。本文将分享一些关键步骤,帮助企业打造一…

MapReduce基本原理

目录 整体执行流程​ Map端执行流程 Reduce端执行流程 Shuffle执行流程 整体执行流程 八部曲 读取数据--> 定义map --> 分区 --> 排序 --> 规约 --> 分组 --> 定义reduce --> 输出数据 首先将文件进行切片(block)处理&#xff…

人工智能快速发展下的极端风险管理

文章目录 前言一、快速进步与高风险并存1、深度学习系统缺乏关键功能,其开发周期尚不明朗2、自主人工智能系统一旦导向不良目标,人类可能面临其失控风险 二、技术研发方向调整1、实现安全人工智能的基础性突破,确保人工智能可靠安全2、实现有…