当前位置: 首页 > article >正文

深入理解文件描述符

问题

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

什么是文件系统?

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

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

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

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

Linux 中文件描述符的本质

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

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

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

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

有趣的问题

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

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

实验结论

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

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

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

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

深入文件读写操作

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

fork() 与文件操作

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

难以理解的函数

下面的代码有什么不同?

Linux 重定向

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

输出重定向示例

深入理解文件描述符实验


http://www.kler.cn/a/524982.html

相关文章:

  • deepseek-r1(Mac版 安装教程)
  • 汽车蓝牙钥匙定位仿真小程序
  • 【新春不断更】题海拾贝:P1878 舞蹈课
  • 【论文复现】基于维度狩猎学习的改进秃鹰搜索算法用于自动驾驶问题
  • 多模态论文笔记——NaViT
  • Android 自定义View时四个构造函数使用详解
  • C语言中的局部变量和全局变量有什么区别?
  • 谷氨酸:大脑功能的多面手
  • 大数据治理实战:架构、方法与最佳实践
  • 12JavaWeb——SpringBootWeb登录认证
  • 【某大厂一面】HashSet底层怎么实现的
  • NLP模型大对比:Transformer > RNN > n-gram
  • 接口技术-第5次作业
  • 视觉语言大模型VisualGLM-6B环境配置与模型部署
  • Jackson中@JsonTypeId的妙用与实例解析
  • 嵌入式经典面试题之操作系统(一)
  • 牛客周赛77:A:JAVA
  • 【ComfyUI专栏】通过软件获取PNG图片中的工作流信息
  • h5 网页测试摄像头
  • MySQL 基础学习(3):排序查询和条件查询