Unix编程学习笔记---文件系统与 i节点

来源:互联网 发布:2016年11月网络热搜 编辑:程序博客网 时间:2024/04/19 13:50



文件系统:   i节点与磁盘文件

 

 

首先提出我的一些问题:

1.      文件描述符fd  、文件对象、i节点、磁盘文件之间是什么关系???

a)        文件对象:表示进程已经打开的文件在内存中的表示,该对象不是物理上的文件,

b)        文件对象在内存中有一段存储内容。

c)        每一个文件对象都包含:文件的状态信息、内存中存储文件内容的缓冲区指针,以及当前文件的读写位置等。在文件对象中,存有文件的iNode节点信息。

d)        文件描述符-------》文件对象------》iNode节点-------》磁盘文件

 

2.      如何将一个字符串形式的路径名,转换为一个文件在内核中的iNode号??

3.      iNode节点都有哪些信息???

4.      如何才能由i节点定位到文件在磁盘上的物理地址的???

 

 

 

1》  目录文件中存有每一个文件的文件名和该文件名所对应的iNode号。

2》  iNode_table文件即:iNode节点表文件,该文件存有iNode号和该iNode号节点的结构体指针,  在iNode节点中存有该iNode节点所指向的在磁盘上的磁盘块的指针。

3》  每一个iNode节点,都对应有一个磁盘文件,该文件要么是目录项或者是普通文件

4》  要点:

 

1.      iNode节点都有哪些信息??

a)        每一个iNode节点都有一个描述它的磁盘数据结构,在iNode节点中存有该iNode节点所对应的文件在磁盘上的数据块的指针和文件的数据块数。

2.      目录文件的作用:

a)        完成文件名到iNode号的映射。

b)        即:给定一个文件名找出其所对应的iNode号。

3.      每一个iNode节点都能唯一定位一个磁盘文件。

4.      在磁盘上,存储的有两种文件:

a)        1目录文件

b)        普通文件

5.      我们来看一下,磁盘结构:

 

 

 

 

如何将一个字符串形式的路径名,转换为一个文件在内核中的iNode号?????

实例:/home/my/code/test.c

 

 

这个工作流程:

1.      首先:把这个路径名拆分成一个个文件名序列,除了最后一项以外,所有的文件名都必定是目录。

在这里是:   home、 my 、 code、test.c

 

2.      内核会存有一个根目录文件,然后内核会把分析出的第一个文件名home,与根目录中的文件名进行匹配,如果找到匹配项,则把该目录项的iNode号提出出来,home的iNode号是2

3.      内核得到一个iNode号,便会在iNode_table 中找到该iNode 号所对应的文件在磁盘上的数据块地址,然后,根据数据块的地址,把文件内容读取到内存当中。

4.      然后继续分析下一个文件名。

5.      重复以上工作。

 

我们发现,home文件名的iNode号的磁盘文件是一个目录文件,该目录文件中的iNode号指向的又是一个目录文件,只有路径名中的最后一个文件名的iNode节点号所对应的磁盘文件是一个普通文件。因此,把此普通文件读取到内存中。


0 0
原创粉丝点击