首页 > 其他分享 >查缺补漏----文件硬连接与软链接(符号链接)

查缺补漏----文件硬连接与软链接(符号链接)

时间:2024-11-03 08:49:11浏览次数:3  
标签:文件 补漏 用户 链接 ---- 索引 打开 节点

首先回顾一下文件打开的过程:

FCB用来存放控制文件需要的各种信息的数据结构,FCB 的有序集合称为文件目录,一个FCB 就是一个文件目录项。

典型的FCB,即一个文件目录项如下:

而UNIX中的目录项如下,每个目录项只包含文件名和索引节点编号,索引节点编号可以看作指针,用来指向索引节点(i节点),索引节点记录了文件的其他信息。

所以在使用open系统调用时,将文件目录项或者文件控制块调入内存都是对的,只是对应操作系统不同而已。

答案:B

以UNIX系统为例,说一下文件打开的过程:

① 用户使用open系统调用。

为什么会有open ():当用户要求对一个文件实施多次读/写或其它操作时,每次都要从检索目录开始。为了避免多次重复地检索目录,引入了open()
怎样使用open():使用文件名检索目录

② 操作系统将该目录项从外存复制到内存中的打开文件表的一个表目中,并将该表目的索引号(也称文件描述符)返回给用户。

③ 当用户再次对该文件发出操作请求时,可通过文件描述符在打开文件表中查找到文件信息。

注意:

① 只要完成了文件打开 open()系统调用,后面再使用 read()、write()、Lseek()、close()等文件操作的系统调用,就不再使用文件名,而使用文件描述符。

② open调用只是在用户打开文件表添加一个表项,并返回给用户索引节点号。而系统打开文件表只有在文件实体第一次被打开时才添加一个表目。也才会通过文件 I/O 将对应的索引节点从磁盘读入内存。 

③ 用户打开文件表和系统打开文件表的区别:

(1)系统打开文件表包含与进程无关的信息,如文件在磁盘上的位置、访问日期和文件大小。系统打开文件表只有一个。每个进程的打开文件表保存的是进程对文件的使用信息,如文件的当前读写指针、文件访问权限并包含指向系统表中适当条目的指针。

(2)一旦有进程打开了一个文件,系统表就包含该文件的条目。当另一个进程执行调用 open 时,只不过是在其打开文件表中增加一个条目,并指向系统表的相应条目。

(3)系统打开文件表为每个文件关联一个打开计数器(Open Count),以记录多少进程打开了该文件。当文件不再使用时,利用系统调用 close 关闭它,会删除单个进程的打开文件表中的相应条目,系统表中的相应打开计数器也会递减。当打开计数器为0时,表示该文件不再被使用,并且可从系统表中删除相应条目。

补充:close就是与open相反的操作,就是将文件控制信息写回磁盘。

 

硬链接:

如下图所示,用户A,B指向同一个内存索引节点,索引中有一个链接计数 count,也称引用计数,表示链接到本索引节点(即文件)上的用户目录项的数目。当count=2时,表示有两个用户目录项链接到本文件上,即有两个用户共享此文件。

软链接(符号链接):

如下图所示,用户B对应的索引节点指向了一个Link型文件,可以类比“快捷方式”,Link型文件中记录了文件F的路径,他会先找到文件F的目录项,接着根据目录项找到文件F的索引节点,再找到文件F,相当于绕了个圈,所以说硬链接的查找速度比软链接快

注:软链接Link型文件是不会影响文件索引节点的计数值的,因为它并不拥有指向其索引节点的指针,只是通过文件中记录的文件的路径访问文件而已。

更详细地解释:

在符号链的共享方式中,当其他用户读共享文件时,系统根据文件路径名依次查找目录,直至找到该文件的索引节点。因此,每次访问共享文件时,都可能要多次地读盘,增大了访问文件的开销。此外,符号链接也是一个文件,其索引节点也要耗费一定的磁盘空间。

注:符号链接文件的引用计数值不受被链接文件的影响,始终为1。

硬链接与软链接的区别:

① 硬链接的索引节点指向的是文件本身,软链接的索引节点指向的是一个Link型文件。

② 硬链接索引节点中的count值会根据链接到本索引节点(即文件)上的用户目录项的数目改变,当 count =0时,表示没有用户使用该文件,才会删除该文件。而软链接索引节点值始终为1。

③ 硬链接只要还有一个指针指向索引节点,索引节点就不能删除。

对于软链接,由于用户只有该文件的路径名,并不拥有指向其索引节点的指针。所以不会发生在文件主删除一个共享文件后留下一个悬空指针的情况。当文件主将一个共享文件删除后,若其他用户又试图通过符号链去访问它时,则会访问失败,于是再将符号链删除,此时不会产生任何影响。

答案:A

关于软,硬链接的例题:

① 软链接始终为1。

② 初始F1引用计数(count)值为1,先建立硬连接又删除,则引用计数还为1。

也可以借助这个图理解:

标签:文件,补漏,用户,链接,----,索引,打开,节点
From: https://blog.csdn.net/weixin_69884785/article/details/143457460

相关文章

  • Air780E如何发送SMS?一文详解!
    ​今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息:一、SMS简介SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络中传输短消息。在4G网络中,短信可以在数据传输的同时进行,不会因数据业务占用网络资源而被延迟或阻塞。在Air780E模块中,当收到新短信后,MAIN_RI变......
  • 从0开始学统计-数据类别与测量层次
    数据分析前,我们首先要弄清楚数据的分类。数据并不仅仅是一堆数字和文字,它们实际上代表了我们看待事物属性的不同视角。从最宽泛的角度出发,我们可以将数据划分为定量(比如用数字表示)或者定性(例如,分成不同类别)。在数据分析过程中,了解数据类型,对选择合适的统计方法与结果解读非......
  • Air780EP之RC522开发板,你了解吗?
    ​本文讲解合宙Air780EP开发板RC522实例。本文档适用于Air780EP开发板;关联文档和使用工具;rc522-rc522非接触式读写卡驱动-LuatOS文档;LuatOS-Soc固件获取https://gitee.com/openLuat/LuatOS/releases一、环境准备1.1Air780EP开发板一套 1.2rc522实物一个 ​......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,山西能源学院教室管理系统当然也不能排除在外。山西能源学院教室管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用 SSM技术构建的一个管理系......
  • xshell-ssh自动多级跳转功能介绍
    xshell-ssh自动多级跳转功能介绍使用xshell在登陆到服务器时,可以配置需要自动执行的命令。最常用的是,我们可以使用此特性完成ssh自动多级跳转。通常,现网生产环境是和不能通过公网直接登陆,需要先登陆到跳板机然后二次登陆。xshell-ssh自动多级跳配置步骤下面以韶山项目的一组......
  • 如何编制一份高效的工程管理所需资料清单?
    本文探讨了如何编制一份高效且全面的工程管理所需资料清单,涵盖清单构建方法、重要组成部分、实用技巧等内容。文章指出,工程管理资料清单在项目中扮演着关键角色,能够帮助团队更好地组织工作流程、分配资源、促进信息透明度,并确保项目符合法律法规和标准,从而降低法律风险。通过......
  • 2024-2025-1 20241328 《计算机基础与程序设计》第六周学习总结
    2024-2025-120241328《计算机基础与程序设计》第六周学习总结作业信息课程2024-2025-1-计算机基础与程序设计作业要求2024-2025-1计算机基础与程序设计第六周作业作业目标Polya如何解决问题,简单类型与组合类型,复合数据结构,查找与排序算法,算法复杂度,递归,代码安全......
  • Icaros 3.3.3 测试版 2 是一组轻量级、高质量的 Windows Shell 扩展,能够为几乎任何视
    Suggested useful videotoolsforFREEIcaros3.3.3beta2 isacollectionoflightweight,highquality,WindowsShellExtensions,whichiscapableofprovidingWindowsExplorerthumbnailsforessentiallyanyvideomediafiletype.IcaroscanprovideWindows......
  • 补题集
    1.https://codeforces.com/contest/2033/problem/B这道题对每个测试样例一个矩阵,求最小次数,观察规律知道只要求最小值的和即可。代码如下:for_inrange(int(input())):n=int(input())mp=[list(map(int,input().split()))for_inrange(n)]s=0fordinrange(-n+1......
  • spring、mybatis、并发、虚拟机总结
    1、spring扩展接口在Spring框架中,扩展接口是一种强大的机制,允许开发者在Spring容器的生命周期中插入自定义逻辑。以下是一些常用的Spring扩展接口及其使用方式:BeanDefinitionRegistryPostProcessor:这个接口在读取项目中的beanDefinition之后执行,提供一个补充的扩展点。你可......