Linux6.4、IO基础(整体深入理解文件描述符)

个人主页:Lei宝啊 

愿所有美好如期而遇


前言

本文章将从源码和内核剖析fd,细节和基础部分可以了解:


我们再来提起文件,文件可以分为两类:

  • 磁盘文件 (未被打开)
  • 内存文件 (被进程在内存中打开)

同时我们也知道文件描述符的本质其实就是数组下标,接下来我们看图:

Linux6.4、IO基础(整体深入理解文件描述符)_第1张图片

我们使用fopen打开一个文件,fopen的底层封装了系统调用open,open打开文件时,会在内存中创建内存文件struct file,然后将这个文件的地址填入到array数组中,将填入位置的下标返回,也就返回了fd,由于fopen的返回值是FILE*,所以FILE里封装了fd。

我们使用fwrite访问文件时,传入参数FILE*,FILE中封装了fd,fd传给fwrite底层封装的系统调用write,write将由操作系统执行,操作系统找到这个write的进程,去找到该进程的task_struct,找到*file,再找到fd_array,通过fd_array[fd]找到内存文件,通过内存文件中的读写方法找到对应需要访问的硬件的驱动方法,向磁盘文件做操作。

我们上层简单的使用fopen,底层需要做的工作确很复杂,这也就体现了封装的好处,对初学者来说也就很友好。 

上述也就是我们对于fd的整体理解,下节我们将说到重定向的原理。

你可能感兴趣的:(Linux,Linux,文件描述符)