30天自制操作系统------文件读取
2017-06-30 10:13
190 查看
自制的操作系统已经可以实现一些简单的命令了,现在要新增一个type命令。
一、type命令简单介绍
1、type命令格式:type
filename
2、type命令作用:读取文件内容,将文件内容显示在命令行窗口上
二、type命令实现思路
在实现命令行中dir命令时,我们了解到文件的相关信息在内存中保存为以下结构:
struct FILEINFO
{
unsigned char name[8],ext[3],type;/*文件名,扩展名,文件属性信息*/
char reserve[10]; /*为了将来可能会保存更多的文件信息而预留*/
unsigned short time,date,clustno; /*存放文件的时间,日期,簇号(扇区)*/
unsigned int size;
/*文件大小,单位为字节*/
};
读取文件内容的步骤应为:
1、获取文件名(在命令行窗口获取)
2、找到该文件的元数据即相对应的FILEINFO
3、根据找到的FILEINFO中的clustno(扇区号)以及文件大小读取文件内容
4、将读取到的文件内容在命令行窗口上显示
三、type命令改进
当要读取的文件内容大小不超过一个扇区的大小时,根据以上思路读取文件是没有问题的;当文件内容大小超过了一个扇区的大小,但是文件保存在连续的扇区内时,根据以上思路来读取文件内容也是没有问题的。但是如果文件内容需要多个扇区才能存储下,并且还存在不连续的扇区中,根据以上思路读取文件就不是很恰当了。
所以我们需要利用文件分配表FAT(file allocation table),FAT记录了文件的下一段存在哪里。为了保证操作系统不那么容易被损坏,微软公司在磁盘中存放了2份FAT,第1份位于0x000200~0x0013ff(占据9个扇区),第2份位于0x001400~0x0025ff。
FAT就好像一个数组,i号单元就记录了读取完i号扇区之后该读取的下一个扇区号,当记录的值为<
4000
/span>FFF时,表示当前读取的扇区就是最后一个扇区。
一个磁盘有2个盘面,80个柱面,一个柱面有18个扇区,所以一个磁盘共有2880(B40H)个扇区,则FAT的每个单元至少需要2个字节才行。很容易观察到高字节的并不是能够被完全利用,所以软盘就将FAT进行压缩了,使用3个字节来存储两个单元的内容。所以在使用fat之前,我们需要先将压缩过的FAT解压缩得到真正的FAT,然后进行文件的读取。
将文件读取出来之后要注意对特殊的字符进行处理,否则显示会出问题。
举例解压缩过程:
03 40 00
—> 003 004
F0 FF FF
—>FF0 FFF
相关文章推荐
- 《30天自制操作系统》前言、目录、样章欢迎阅读!
- 发布在《30天自制操作系统》之前的帮助阅读贴
- 读书笔记《30天自制操作系统》day08
- 30天自制操作系统days1代码
- 读书笔记《30天自制操作系统》day03
- 自制程序读取FAT32文件系统上的文件
- 30天自制操作系统笔记 第2天
- 读书笔记《30天自制操作系统》day01
- 读书笔记《30天自制操作系统》day07
- 30天自制操作系统笔记 第1天
- 30天自制操作系统
- 推荐一本书,30天自制操作系统
- 写在《30天自制操作系统》上市之前
- 读书笔记《30天自制操作系统》day10
- 读书笔记《30天自制操作系统》day04
- 为什么《30天自制操作系统》封面中的猫是两只尾巴
- 发布在《30天自制操作系统》之前的操作捷径必读贴
- Linux操作系统中读取目录文件信息的过程分析
- 读书笔记《30天自制操作系统》day02
- 30天自制操作系统笔记 第0天