Linux 中的文件描述符

问题描述 投票:0回答:1

Linux 系统中的文件描述符实际如何应用来执行读写操作 I/O 模块是否使用文件描述符信息向适当的文件写入或读取数据

linux io operating-system computer-science
1个回答
0
投票

文件描述符是一个数字。它是存在于内核空间中的打开文件数组的索引。每个进程都有一个这样的数组(除非他们决定共享)。

该数组包含指向文件结构的指针 - 内核结构表示打开的文件、设备或网络套接字。该结构包含许多簿记字段,甚至可以由拥有该文件的驱动程序进行扩展。但最重要的字段是“文件操作”——该字段包含指向系统调用背后的实际代码的函数指针列表——每个系统调用都有一个函数指针。是的,相同的系统调用可以调用不同的代码 - 取决于文件的类型:常规文件将调用文件系统驱动程序中的函数,网络套接字将调用网络驱动程序中的函数,等等。 所以整体流程是这样的:

您调用系统调用,并为其提供
    文件描述符。
  1. 系统调用索引当前进程的
  2. 打开文件的数组
  3. 。如果具有该索引的条目未打开 - 返回错误。 系统调用获取
  4. file struct
  5. 指针,并检索指向所请求操作的函数指针。如果不支持该操作 - 返回错误。 调用该函数。将文件结构指针和所有参数传递给函数。
您可能会问——为什么有这么多并发症?为什么不直接将
file *

传递给系统调用呢?这是为了安全——如果用户程序可以以某种方式操纵文件结构,或者将内核指向一个伪造的文件结构——它就可以访问任何文件,完全绕过任何安全检查。这就是为什么存在一定程度的间接性非常重要,该间接性完全位于内核保护的内存中 - 用户程序无法访问该内存。

    

© www.soinside.com 2019 - 2024. All rights reserved.