Linux 系统中的文件描述符实际如何应用来执行读写操作 I/O 模块是否使用文件描述符信息向适当的文件写入或读取数据
文件描述符是一个数字。它是存在于内核空间中的打开文件数组的索引。每个进程都有一个这样的数组(除非他们决定共享)。
该数组包含指向文件结构的指针 - 内核结构表示打开的文件、设备或网络套接字。该结构包含许多簿记字段,甚至可以由拥有该文件的驱动程序进行扩展。但最重要的字段是“文件操作”——该字段包含指向系统调用背后的实际代码的函数指针列表——每个系统调用都有一个函数指针。是的,相同的系统调用可以调用不同的代码 - 取决于文件的类型:常规文件将调用文件系统驱动程序中的函数,网络套接字将调用网络驱动程序中的函数,等等。 所以整体流程是这样的:
您调用系统调用,并为其提供
file *
传递给系统调用呢?这是为了安全——如果用户程序可以以某种方式操纵文件结构,或者将内核指向一个伪造的文件结构——它就可以访问任何文件,完全绕过任何安全检查。这就是为什么存在一定程度的间接性非常重要,该间接性完全位于内核保护的内存中 - 用户程序无法访问该内存。