从Linux的层次角度来说,在用户空间是存在这样的概念的,这个概念是存在内核空间的,而且是针对打开的文件的!
内核用三种数据结构来描述一个打开的文件。
数据结构一:
文件描述符表(descriptor table):
每个进程都有它独立的描述符表,它的表项是由进程打开的文件描述符来索引的。每个打开的文件描述符表项指向文件表中的一个表项。形象化的表示应该是这个样子.
数据结构二:
·打开的文件表(fìle table) 。
所有"打开的文件"的集合!所有进程共享这张表!打开的文件表的表项,即是文件表项.
文件表项的内容包含:
当前的文件位置、引用计数(referencecount) (即当前指向该表项的描述符表项数),以及一个指向v-node 表中对应表项的指针。打开文件的集合是由一张文件表来表示的,所有的进程共享这张表。
文件表项的样子:
数据结构三:
v-node 在(v-node table) 。同文件表一样,所有的进程共享这张v-node 表。每个打开的文件(或设备)都有一个V节点(v-node)结构.v节点包含了"文件类型" 、对该文件进行各种操作的函数指针。注: 对大多数文件来说,v节点还包含了该文件的i-node节点这些信息是在打开文件是从磁盘上读入内存的,所以所有关于文件的信息都是快速可供使用的!
i-node节点包含的信息:
1>.文件所有者
2>.文件长度
3>.文件所在的设备
4>.指向文件实际在磁盘上所在位置的指针
三者之间的关系如下图所示:
(CWY注:这里的"文件表"指的是打开的文件表集合!)
每个文件表的表项组成(针对我们的目的)包括有当前的文件位置、引用计数(referencecount) (即当前指向该表项的描述符表项数),以及一个指向v-node 表中对应表项的指针。关闭一个描述符会减少相应的文件表表项中的引用计数。内核不会删除这个文件表表项,直到它的引用计数为零“文件表项”--file table entry的含义,从英文的名字可以更好的理解他的含义,即文件表入口或是文件表条目等!即使
"文件表项"实际上就是一张"文件信息表"。 非要找个实物来的话,看看上图的"房产信息申请表"大概就知道了!就是列了很多项,在对应的项需要填写对应的信息!那么文件表项中都有哪些信息呢??每个文件表项包含如下信息:
<1>.文件状态标志( 读,写,追加,同步和非阻塞等 )
<2>.当前文件偏移量
<3>.指向该文件v节点表项的指针
画成图大概就是这个样子!文件表项:即文件表表项,总结:
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,
差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)