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

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

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。

也可以借助这个图理解:

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

为什么选择AWS

在选择云服务提供商时,国内企业面临了不少选择,但亚马逊AWS仍然在许多人心中占据了一席之地。那为什么会选择AWS呢?今天九河云就来带大家一起来探讨一下背后的原因。 1. 全球化的布局与服务优势 AWS的全球化布局和服务网络可以说是它的最大…

到底是谁在初始化内存?—揭开处理器启动过程的奥秘

引言 在嵌入式系统和处理器架构的世界中,内存初始化过程就像一场舞台上的神秘表演。我们知道处理器依赖内存运行应用程序,但它最初如何实现内存的自我启动?在设备开机的那一刻,处理器如何有序地将启动加载程序(Bootlo…

【制造业&PPE】安全帽等施工现场安全防护装备识别图像分割系统源码&数据集全套:改进yolo11-DRBNCSPELAN

改进yolo11-DBBNCSPELAN等200全套创新点大全:安全帽等施工现场安全防护装备识别图像分割系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视…

android——渐变色

1、xml的方式实现渐变色 效果图&#xff1a; xml的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools…

CPU算法分析LiteAIServer视频智能分析平台噪声检测功能在视频监控中的应用与优势

在视频监控系统中&#xff0c;噪声问题一直是影响视频画面清晰度和可用性的关键因素。这些噪声可能源于多种因素&#xff0c;如低光环境、摄像机传感器的高灵敏度或编码压缩过程中的失真等。为了应对这些挑战&#xff0c;CPU算法分析LiteAIServer引入了噪声检测功能&#xff0c…

WPF使用prism框架发布订阅实现消息提示

我们在使用wpf中自带的消息提示弹出框MessageBox.Show()十分笨拙&#xff0c;那么怎么去使用prism框架的发布订阅去实现消息提示呢&#xff1f; 1.创建一个类&#xff0c;继承接口PubSubEvent /// <summary> /// 发布订阅消息事件 /// </summary> public class M…

贪心算法习题其二【力扣】【算法学习day.19】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

嵌入式浏览器 -- Chromium VS Firefox

嵌入式浏览器概念 嵌入式浏览器是嵌入式系统中的核心组件之一&#xff0c;用于为设备提供网络访问能力和内容显示功能。与传统PC浏览器相比&#xff0c;嵌入式浏览器更加注重性能优化和资源效率&#xff0c;同时确保核心功能可用&#xff0c;如HTML渲染、JavaScript支持和多媒…

百度文心智能体:巧用汉字笔画生成与汉字搜索插件,打造一个学习汉字的教育类智能体

这篇文章&#xff0c;主要介绍如何巧用汉字笔画生成与汉字搜索插件&#xff0c;打造一个学习汉字的教育类智能体。 目录 一、教育类智能体 1.1、智能体演示 1.2、智能体插件 1.3、智能体prompt &#xff08;1&#xff09;角色和目标 &#xff08;2&#xff09;思考路径 …

推荐一款功能强大的数据库开发管理工具:SQLite Expert Pro

SQLite Expert Professional是一个功能强大的工具&#xff0c;旨在简化SQLite3数据库的开发。 它是SQLite的一个功能丰富的管理和开发工具&#xff0c;旨在满足所有用户从编写简单SQL查询到开发复杂数据库的需求。 图形界面支持所有SQLite功能。 它包括一个可视化查询构建器&a…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛&#xff0c;简称蓝桥杯&#xff0c…

<HarmonyOS第一课>应用/元服务上架的课后习题

善者&#xff0c;吾善之&#xff1b; 不善者&#xff0c;吾亦善之&#xff0c;德善。 信者&#xff0c;吾信之&#xff1b; 不信者&#xff0c;吾亦信之&#xff0c;德信。 圣人在天下&#xff0c;歙歙焉为天下浑其心&#xff0c;百姓皆注其耳目&#xff0c;圣人皆孩之。 通过&…

数据结构 之 线索二叉树(七)

提示&#xff1a;本篇主要讲解线索二叉树的基本概念和二叉树、树&#xff0c;森林之间的转换 文章目录 线索二叉树基本概念线索二叉树类型定义线索二叉树的基本概念中根线索二叉树树向二叉树的转换森林转换二叉树树和森林的遍历(知道即可&#xff09; 线索二叉树基本概念 提示…

二十九、Python基础语法(继承-上)

一、概念介绍 继承&#xff1a;继承描述的是类与类之间的关系&#xff0c;集成之后子类对象可以直接使用父类中定义的方法的属性&#xff0c;可以减少代码冗余&#xff0c;提高编码效率。 二、继承语法 三、继承例子 # 定义一个父类 Animal class Animal:def __init__(self,…

arcgis坐标系问题

2000数据框的工程只能打开2000坐标系的矢量数据和栅格数据&#xff08;影像图&#xff09;&#xff0c;如果打开80的数据则会投影错误&#xff0c;出现较大偏差。 解决方案&#xff1a;80数据框打开80数据&#xff0c;2000数据库打开2000数据。

Java基础05

目录 一、引入 插入方法currentTimeMillis()的介绍 二、详细介绍 1.String 2.StringBuilder ①StringBuilder与String的区别 ②StringBuilder的常用方法 3.StringBuffer 拓展&#xff08;缓冲区&#xff09; 三、对比 1.⭐String&#xff0c;StringBuffer&#xff0c…

033_Structure_Static_In_Matlab求解结构静力学问题两套方法

结构静力学问题 静力学问现在是已经很简单的问题&#xff0c;在材料各向同性的情况下&#xff0c;对于弹性固体材料&#xff0c;很容易通过有限元求解。特别是线弹性问题&#xff0c;方程的矩阵形式可以很容易的写出&#xff08;准确得说是很容易通过有限元表达&#xff09;&a…

Zabbix Agent端安装部署

文章目录 1. 功能概述2. 版本说明3. Agent安装说明4. Agent2安装说明 Zabbix Agent是Zabbix监控系统中的一个重要组件&#xff0c;它部署在被监控的目标主机上&#xff0c;负责收集主机的各类数据&#xff08;如性能指标、日志信息等&#xff09;&#xff0c;并将这些数据发送到…

C#/WinForm 鼠标穿透自定义区域截图(后续实现录屏)

效果 窗体截图录屏 git地址&#xff1a;https://gitee.com/feng-cai/screenshot-recording

Golang文件操作

1.文件介绍&#xff1a;文件是数据源&#xff0c;主要作用是保存数据 2.文件在程序中是以流的形式来操作的 对文件的操作主要用File(os包)结构体来实现 文件的基本操作 1&#xff09;打开一个文件进行读操作&#xff1a; os.Open(name string)(*File,error) 2&#xff09;关…