您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作系统