文件
最后更新于:2022-04-02 04:09:28
[TOC]
## 文件
- 磁盘上信息的一种抽象,把信息抽象成拥有名字的一个集合
- 不同文件系统对文件的表示方法不同,但提供相似的操作接口(POSIX标准)
- Portable Operating System Interface
## 文件操作
- create创建空文件,并设置一些属性
- delete删除文件
- open将文件属性和磁盘地址载入内存
- close关闭文件,释放资源(有可能伴随写入)
- read读取当前位置数据;需要提供数据大小和缓冲区
- write在当前位置写入数据(中间覆盖,末尾追加
- append追加( write的特殊形式
- seek改变当前位置
- get attribute 获取属性
- Set attribute设置属性
- rename重命名
## 文件的实现方式
### 连续分配

会产生碎片问题

### 链表分配
文件分成多个节点,用链表串起来

问题:
虽然每个块都是4Kb,但是需要拿出几个字节存储下一层的指针,但是可存数据小于4Kb,但是很多程序都是4k对齐的
### 内存中的链表分配 - FAT
把链表信息维护在内存中

在内存中可以先获取文件的起始块,在硬盘中通过找到下一块的地址(占4字节)
问题: 1T硬盘,每个块4K 需要多大的FAT表
`$ \frac{1T}{4k}*4byte=\frac{2^{30}}{4}*byte=1G $`
需要一个1G 大小
### index-node

只有打开的文件才把 inode加载到内存中,更多 inode是在磁盘上

Inode 如何存储大文件

';