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

文件描述符,它在哪里存的,exec()后还存在吗

学过计系肯定了解 寄存器、程序计数器、堆栈这些 程序运行需要的资源。 这些是进程地址空间
而操作系统分配一个进程资源时,分配的是 PCB 进程控制块
所以进程控制块还维护其他资源——程序与外部交互的资源——文件、管道、套接字。

文章目录

    • 文件描述符
    • 进程管理
    • exec() 之后文件描述符的情况

文件描述符

文件描述符(File Descriptor, FD)是由操作系统管理的资源,并不会存储在用户进程的地址空间,而是由内核维护,并在进程控制块(PCB)中记录。

用户态的进程只能通过 fd(整数)间接访问文件,无法直接访问内核中的文件数据。

进程管理

┌───────────────────┐
│  进程控制块(PCB) │
│ ┌───────────────┐ │
│ │  文件描述符表  │ │   <--- 用户进程访问的 `fd` 存在这里
│ │  (fd 0 -> stdin) │
│ │  (fd 1 -> stdout) │
│ │  (fd 2 -> stderr) │
│ │  (fd 3 -> socket) │
│ └───────────────┘ │
└───────────────────┘

┌───────────────────────┐
│  文件描述符表【进程私有】│
│  fd 3 -> 指向打开文件表 │
└───────────────────────┘
           ↓
┌───────────────────┐
│  打开文件表【系统共享】│
│  记录文件偏移量、模式  │
└───────────────────┘
           ↓
┌───────────────────┐
│   VFS【文件系统】  │
│   指向具体文件数据 │
└───────────────────┘

exec() 之后文件描述符的情况

exec() 不会 清空进程的文件描述符表(除非 FD_CLOEXEC 标志被设置)。

fcntl(pipefd[1], F_SETFD, FD_CLOEXEC);  // 让写端在 exec() 后自动关闭可以设置这个标志位
其实就是 close after exec ~

文件描述符仍然指向原来的打开文件表和 VFS 层的文件对象,因此 exec() 后仍可使用继承的 fd(如管道、套接字)。

相关文章:

  • 【STM32】对stm32F103VET6指南者原理图详解(超详细)
  • 支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施
  • ✨分享我在飞书多维表格中使用DeepSeek的经历✨
  • STM32F103_LL库+寄存器学习笔记05 - GPIO输入模式,捕获上升沿进入中断回调
  • 飞速(FS)InfiniBand解决方案助力领先科技公司网络升级
  • kettle插件-mysql8数据库插件
  • MySQL进阶
  • 【linux复习】——进程间通信
  • 【HarmonyOS NEXT】EventHub和Emitter的使用场景与区别
  • 基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)
  • UART(通用异步收发传输器)
  • 删除排序链表中的重复元素
  • CF254B Jury Size
  • 抽象的算法0.1.3.2版本
  • Flutter 完整开发指南
  • 【Qt】C++前向声明与Qt信号与槽的区别
  • 备赛蓝桥杯之第十六届模拟赛2期职业院校组第六题:菜谱教程
  • 【Python】天气数据可视化
  • 啸叫抑制(AFS)从算法仿真到工程源码实现-第八节-系统搭建
  • NVMe协议
  • 美叙领导人25年来首次会面探索关系正常化,特朗普下令解除对叙经济制裁
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 中科飞测将投资超10亿元,在上海张江成立第二总部
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 英媒:英国首相住所起火,目前无人伤亡