深入理解文件描述符

news/2025/1/30 10:32:40/

问题

文件描述符只是一个整数值,那么系统是如何利用这个整数值来完成文件读写的呢?

什么是文件系统?

计算机中用于组织、存储和管理文件的数据结构集合

  • 管理磁盘或其他存储介质上的空间 (将存储介质分块管理)
  • 保证文件数据不被破坏,确保数据的一致性和完整性

为用户和应用程序提供了访问和操作文件的标准化接口

  • 方便地创建、删除、修改、重命名文件
  • 实现对文件的读写以及权限控制等功能

Linux 中文件描述符的本质

每个进程都有一个文件描述符表,记录这个进程打开的所有文件

文件描述符是文件描述符表中表项的下标 (整数值)

调用 open() 打开一个文件时:

  • 在内核 文件打开表 增加一个新表项 (记录文件读写指针等信息)
  • 在进程 文件描述符表 增加一个新表项 (open() 返回表项下标)
  • 文件描述符表项 指向 文件打开表项 (多对一)

有趣的问题

同时用 open() 打开一个文件会发生什么?

下面的程序输出什么?为什么?

实验结论

每次调用 open() 函数都会返回一个文件描述符 (文件描述符相对独立)

open() 同一个文件的不同文件描述符对应相同的物理文件

不同文件描述符的读写指针不同 (均可读写到物理文件中)

从逻辑而言,不同文件描述符的读写操作互不影响

深入文件读写操作

下面的程序输出什么?为什么?

fork() 与文件操作

父子进程中的 fd 完全相同,指向同一打开文件表项;因此,父进程的写操作会影响子进程

难以理解的函数

下面的代码有什么不同?

Linux 重定向

对原来系统的默认执行方式进行改变,比如:不希望在显示器进行输出而是希望保存到指定文件,此时可通过 Linux 重定向来完成这项工作

输出重定向示例

深入理解文件描述符实验


http://www.ppmy.cn/news/1567867.html

相关文章

面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组,编写一个函数来计算它们的交集。 示例: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 输入:nums1 [4,9,5], nums2 [9,4,9,8,4] 输出:[9,4] 2. 思路 直接暴力…

1.2.神经网络基础

目录 1.2.神经网络基础 1.2.1.Logistic回归 1.2.2 梯度下降算法 1.2.3 导数 1.2.4 向量化编程 1.2.5 正向传播与反向传播 1.2.6.练习 1.2.神经网络基础 1.2.1.Logistic回归 1.2.1.1.Logistic回归 逻辑回归是一个主要用于二分分类类的算法。那么逻辑回归是给定一个x ,…

kotlin 简介

Kotlin 是一种现代化、跨平台的编程语言,由 JetBrains 开发,并于 2011 年首次发布。它可以用于多种开发场景,包括 Android 应用开发、后端服务开发、Web 开发,以及跨平台应用开发。 以下是对 Kotlin 的核心介绍: Kotl…

代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数

把目标值当作背包容量,每个平方数当作物品,题目变更为装满指定容量的背包,最小用几个物品会不会出现拼凑不出来的情况?不会,因为有数字1,对任意正整数百分百能拼凑出来因此此题目与上一道题就变得一模一样了…

Typesrcipt泛型约束详细解读

代码示例: // 如果我们直接对一个泛型参数取 length 属性, 会报错, 因为这个泛型根本就不知道它有这个属性 (() > {// 定义一个接口,用来约束将来的某个类型中必须要有length这个属性interface ILength{// 接口中有一个属性lengthlength:number}function getLen…

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Redis内部数据结构--跳表详解

跳表 1. 什么是跳表--skiplist2. skiplist的效率如何保证3. 跳表的实现4. 跳表与平衡搜索树和哈希表的对比 1. 什么是跳表–skiplist skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为…