文件描述符的最终解释!!!!!!

上个月写的博客但是一直没发,就今天发了吧.总结的感觉的又忘了…

经过两天的学习,翻看源代码看博客,终于对这个文件系统有了一点点粗略的理解,过程可以说是痛苦的,因为你一看就会有更多的知识点出现,但是在内核的海洋,操作系统中航行,感觉还不错,就是有点吃力
不过也收获了很多,虽然是内功,但是感觉还是不错的,现在做个总结

这个是我总结的图
文章的下面有一个网上的图,是一个标准的,因为我理解能力差,多画了几步.
在这里插入图片描述

首先解释一下文件描述符:

文件描述符就是文件描述符数组的下标,也就是说是一个数组的下标!这是我们都知道的!

文件描述符数组中存放了所有进程中打开的文件,我们默认是已经打开了三个的,在图中也已经看到了
那么文件描述符数组到底什么?要解决这个问题,得去内核中看一看 在 linux/fdtable.h 头文件中 在一个结构体struct files_struct{};中
在这里插入图片描述
这个结构体中其他数据不去关注,我们就看在这里面定义的这个结构体指针数组 structfile__rcufd_array[NR_OPEN_DEFAULT];
那么他指向了一个什么结构体呢??? struct file这个结构体 ,在上面的图中我们可以看出 是一个包含的关系我们的struct files_struct包含了 struct file这个结构体数组指针,我们在 Linux/fs.h可以找到这个struct file这个结构体,那么很明显是一个包含的关系.上面我们也说过了文件描述符存放的是进程中打开的文件,也就是说这个结构体数组里面包含了很多关于文件的信息,可能就有文件的目录,文件的状态(比如文件的读写状态),文件的大小,文件的计数,当前的读写位置,文件的操作等等…很多很多
那么我们就需要打开看一看这个结构体里面有什么了

这个结构体在linux/fs.h中 贴出一部分图

在这里插入图片描述
在头文件中,开始于885行结束在940多行 ,具体可以自己打开看一看,这这个结构体里面有很多很多的定义,其中我们只看几个,就是在我文章开头所总结的

我们先不总结这个 struct inode *f_inode; (文件索引)
先来看
struct file_operation *f_op;
这个从定义就可以看出是一个结构体指针,那么这个从结构体名字就可以看出是操作文件的函数结构体了,不过这不是最终的文件操作函数(假如每个PCB里面都有这些函数的定义,那么耗费的资源也是不小的),文件操作函数在内核中,我们这个结构体里面是文件操作函数指针,我们当调用一个open函数的时候,通过我们定义的结构体指针 f_op 指向结构体里面的函数指针,那么在运行的时候,我们的函数指针找到函数的地址,就可以完成函数的调用了. f_op->(*open)() ->open();
还有其他的信息,就不在说了,因为我也没看,看到的,就总结在了上图里面
好了接下来就要总结inode 这个结构体了
在struct file 这个结构体中 inode 的出现是要早于函数操作这个结构体之前的,那么说明了什么呢?我们操作一个文件之前先干什么?当然是先找到他再去操作这个文件了,
一个文件由三部分组成,文件的属性权限以及文件的内容,我们的文件索引干的就是前面两件事,文件的属性以及文件的权限
那么谁干后面的事情?? 就是 一个叫做 block 的家伙 ,在这就不多说了,我们只需要知道block干的是存储文件内容的活就行了

这个inode被称为文件索引,他有一个编号,就像身份证一样,每个文件都有一个独一无二的编号,当然除了硬链接(可理解为一个文件有一个别名)

这是网上找的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值