个人主页:Lei宝啊?
愿所有美好如期而遇
本文章将从源码和内核剖析fd,细节和基础部分可以了解:
我们再来提起文件,文件可以分为两类:
同时我们也知道文件描述符的本质其实就是数组下标,接下来我们看图:
我们使用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的整体理解,下节我们将说到重定向的原理。