Linux 文件描述符是什么?

系统 Linux
我们如何通过文件描述符与 Linux 文件系统交互?文件描述符代表一个打开的文件。它是操作系统分配给每个文件的唯一编号。它是处理文件的一个抽象概念。我们需要使用文件描述符来读取或写入程序中的文件。每个进程都维护自己的文件描述符表。

我们如何通过文件描述符与 Linux 文件系统交互?

文件描述符代表一个打开的文件。它是操作系统分配给每个文件的唯一编号。它是处理文件的一个抽象概念。我们需要使用文件描述符来读取或写入程序中的文件。每个进程都维护自己的文件描述符表。

下图显示了 Linux 文件系统的分层架构。让我们以进程 1234 为例。

1.用户空间

当我们在进程 1234 中打开一个名为 “fileA.txt ”的文件时,会得到文件描述符 fd1,它等于 3。然后,我们可以将文件描述符传递给其他函数,向文件写入数据。

2.内核空间

在 Linux 内核中,有一个进程表来维护进程的数据。每个进程在表中都有一个条目。每个进程都维护一个以文件描述符为索引的文件描述符表。请注意,每个文件描述符表中都保留了文件描述符 0、1 和 2,分别代表 stdin、stdout 和 stderr。

文件指针指向打开文件表中的一个条目,该表包含所有进程中打开文件的信息。多个文件描述符可以指向同一个文件表项。例如,文件描述符 0、1 和 2 指向同一个打开文件表项。

由于不同的打开文件表项可以代表同一个文件,因此多次存储文件静态信息是一种资源浪费。我们需要另一个名为 “vnode 表 ”的抽象层来存储静态数据。

在每个文件表条目中,都有一个 vnode 指针,它指向 vnode 表中的一个条目。静态信息包括文件类型、函数指针、引用计数、inode 等。

3.文件系统

inode 数组元素存储实际文件信息,包括权限模式、所有者、时间戳等。

责任编辑:华轩 来源: ByteByteGo
相关推荐

2021-05-19 14:48:58

Linux文件fd

2023-04-06 15:22:15

Linux进程系统

2020-02-07 18:16:01

进程线程底层原理

2012-08-08 10:31:41

IBMdW

2019-03-05 22:15:08

BashLinux命令

2023-12-13 14:01:34

Elasticsea文件描述符操作系统

2021-06-18 06:02:24

内核文件传递

2017-02-05 10:06:53

Python黑魔法描述符

2016-10-28 21:55:28

Javascript属性特性属性描述符

2009-07-08 09:46:45

Servlet注释部署描述符

2019-07-09 14:30:16

LinuxJava 服务器

2019-07-09 15:30:31

Linuxulimit文件描述符

2009-09-04 14:04:53

C#文档

2019-07-05 14:20:45

RPC服务器模型

2016-08-23 17:21:51

UnixLinux重定向

2022-11-16 08:43:56

Linux/etc/hosts文件

2021-06-04 07:55:30

Node Fs 操作

2011-08-25 14:03:36

creat中文man

2011-08-25 14:19:52

open中文man

2021-01-18 05:11:14

通信Nodejs进程
点赞
收藏

51CTO技术栈公众号