[Linux] 文件描述符和打开文件之间的关系

本文探讨了Linux中文件描述符、文件句柄和i-node表之间的关系,涉及进程级的文件描述符表、系统级的打开文件句柄和文件系统级的i-node表。分析了在不同场景下,如dup()、fork()调用后,这些元素如何相互关联,并解释了文件偏移量和文件标志的共享特性。
摘要由CSDN通过智能技术生成

前言

文件描述符、文件句柄和i-node之间的关系,应该是Linux Native Programming的基本功。Golang、C++11写久了之后,这些概念有些淡忘,今天顺便梳理下。

铺垫

为了搞清楚这当中的关系,我们首先要了解内核维护的3个数据结构:

  • 进程级的文件描述符表
  • 系统级的打开文件句柄
  • 文件系统级的i-node表
进程级的文件描述符表

单条表项,包括:

  • 文件描述符标志,如close_on_exec标志;
  • 对应文件句柄的索引
系统级的打开文件句柄

单条表项,包括:

  • 当前文件偏移
  • 文件打开标志、访问权限
  • 对应inode对象的索引
文件系统级的i-node表

单条表项,包括:

  • 文件类型和访问权限
  • 文件的基本属性

分析

在前面,我们对基本概念进行了铺垫;接下来,我们结合下图进行更加细致的分析。

  • 在进程A中,文件描述符1和文件描述符20指向同一个文件句柄23,这可能是dup()系统调用的结果;
  • 进程A的文件描述符2和进程B的文件描述符2指向同一个文件句柄70,这可能是fork()后的结果&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值