1、硬盘中的静态文件和inode(节点)
(1)、 文件平时都存放在硬盘中的,硬盘中存储的文件以一种固定的形式存放的,我们叫做静态文件。
(2)、一块硬盘中可以分为两大区域:一个是硬盘内容管理表项,另一个是真正存储内容的区域。操作系统访问硬盘时先去读取硬盘内容管理表,从中找到我们要访问的那个文件的扇区级别的信息,然后再用这个信息去查询真正存储内容的区域,最后得到我们想要的文件。
(3)、操作系统最终拿到的信息是文件名,最终得到的是文件内容。第一步就是去查询硬盘内容管理表,这个管理表中以文件为单位记录了各个文件的各种信息,每一个文件有一个信息列表(我们叫做inode,i节点,其实质是一个结构体,这个结构体有很多元素,每个元素记录了这个文件的一些信息,其中包括文件名、文件在硬盘上对应的扇区号、块号这些东西........)
强调:硬盘管理的时候是以文件为单位的,每个文件一个inode,每个inode有一个数字编号,对应一个结构体,结构体中记录了各种信息。
(4)、联系平时实践,大家格式化硬盘(U盘)时发现有:快速格式化和(底层)格式化。快速格式化非常快,普通格式化速度慢。快速格式化就是只删除了U盘中的硬盘内容管理表(其实就是inode),真正存储的内容没有动,这种格式化的内容是有可能被找回的。
2、内存中被打开的文件和vnode(v节点)
(1)、一个程序的运行就是一个进程,我们在程序中打开的文件就属于某个进程。每个进程中都有一个数据结构用来记录这个进程的所有信息(叫做进程信息表),表中有一个指针会指向一个文件管理表,文件管理表中记录了当前进程打开的所有文件及其相关信息。文件管理表中用来索引各个打开的文件的index就是文件描述符fd,我们最终找到的就是一个已经被打开的文件的管理结构体vnode。
(2)、一个vnode中就记录了一个被打开的文件的各种信息,而且我们只要知道这个文件的fd,就可以很容易的找到文件的vnode进而对这个文件进行各种操作。
3、文件和流的概念
(1)、流(stream)对应自然界的水流。文件操作中,文件类似一个大包裹,里面装了一堆字符,但是文件被读出/写入时都只能一个字符一个字符的进行,而不能一股脑儿的读写,那么一个文件中N多的字符被挨个一次读出/写入时,这些字符就构成一个字符流。
(2)流这个概念是动态的,不是静态的。
(3)编程中提到流这个概念,一般都是IO相关的。所以经常叫IO流。文件操作时就构成了一个IO流。