JAVA File类 分析
Posted blfbuaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA File类 分析相关的知识,希望对你有一定的参考价值。
本章開始介绍UNIX文件系统。
文件系统是怎样管理文件的呢?那咱们要先文件的存储介质開始--磁盘
磁盘是计算机系统的一个硬件设备,文件系统为了可以管理磁盘。对其进行了三层抽象(本文全部内容均指UNIX文件系统,windows文件系统有兴趣的同学自行研究!~)
第一层抽象:将一整块磁盘分区
第二层抽象:将磁盘切割为block
第三层抽象:将block 逻辑上划分为四个区域
第三个层次也就是咱们要研究的部分
Unix系统的分区例如以下:
引导块 | 超级块 | i节点表 | 文件存储区 |
(2)超级块:1号块,通常也成为管理块。是文件系统的第二块,也是文件系统的头。存放安装和管理文件系统的所有管理信息。包含文件系统大小、文件系统所在的设备区、i节点表大小、空暇空间大小、空暇链表头等。
(3)i节点表:由若干块构成的一片磁盘区域,i节点表在超级块中指明,一个i节点号相应一个文件,i节点相关内容例如以下:
mode |
type |
uid |
gid |
link.no |
size |
addr.pt |
time |
占用标志。0:空,1:占用 |
文件类型 |
属主 |
属组 |
链接数 |
大小 |
指向文件实际数据块的指针 |
近期訪问/改动日期时间 |
每一个文件系统的属性,如大小,文件的全部者,近期改动时间等,都记录在I-节点的结构中。全部的I-节点都有同样的大小
(4)文件存储区:除了前三部分外。其余空间都是文件存储区,该区占了整个存储空间的绝大部分。
生命短暂,咱们还是通过实例来看
一、创建文件:文件系统是怎样分配这三个区域的
执行一个cat spwd.c > test 如图:
创建的步骤例如以下图
1、找到一个空i-节点存储文件属性
2、内核从free的数据block中找出可以存储文件大小的几个block。存储数据图中是找出A,B,C三块
3、将A,B,Cblock记录到第40个block i节点上(i-节点,一共能存储13个block。只能存储10个数据block。后3个空间在存在大文件使用,11块叫二级间接块,12块叫三级间接块,13呢?那就说明文件太大了,须要又一次定义block的大小,block大了,自然i-节点就能够放下了)
4、将i-节点 加入到目中。映射关系是40:test,文件夹下边将讨论
二、什么是文件夹
文件夹是一种包括文件名称字列表的特殊文件,不同的系统实现方式不同,可是,其抽象模型基本一致-------i-节点和文件名称列表。
知道这些 就差点儿相同了。
三、文件是怎样被读取出来的呢?
能够看做是创建文件的逆操作。
1、去文件夹 查找与test文件名称同样的i-节点号
2、去顺序为40i-节点的记录中 查找blockA,B,C
3、读取A,B,C
4、拷贝到用户空间
须要注意是1,2,3 过程都是在内核空间中。第4步 才到用户堆栈空间,这里有涉及到了内核态和用户态。依旧不会再这里讨论,内容太多了。
以上不过粗略的介绍,文件系统涉及内容还有非常多,比方大文件的存储。多个文件系统的整合,虚拟文件系统等
在结束本篇之前。再说两句,一个block 是5 1 2字节,我们常常使用的find 命令中size选项 的大小就是blcok为计算。find 命令的使用请自行查阅man find 手冊
至于是不是5 1 2字节,那么咱们就实践一下。spwd是9368个字节
执行一下 find . -type f -size +19
意思查找当前文件夹下type为文件类型,大于19个block的文件。
没有找到,那么咱们执行 find . -type f -size +18 (18*512=9126)
OK 找到了。
今天就到这里,接下来将讨论文件属性和文件夹
以上是关于JAVA File类 分析的主要内容,如果未能解决你的问题,请参考以下文章