读取文件内容
我们在运行应用程序之前,先来实现读取文件内容的功能吧。
在Windows的命令行窗口中也有这样的功能,当我们输入“type 文件名”时,就会显示文件的内容。
定义一个文件信息结构:
struct FILEINFO{
unsigned char name[8],ext[3],type;
char reserve[10];
unsigned short time,date,clustno;
unsigned int size;
}
其中clustno变量,代表文件从哪个扇区号开始存放。
我们可以根据下面的公式,根据扇区号计算出文件在磁盘映像中的地址:
磁 盘 映 像 中 的 地 址 = c l u s t n o ∗ 512 + 0 x 003 e 00 磁盘映像中的地址 = clustno*512 +0x003e00 磁盘映像中的地址=clustno∗512+0x003e00
这里有的同学会好奇,最后为什么是加上0x003e00呢?
这个放在后面说明,我们先用这个公式把文件中的内容读取出来。
bootpack.c节选:
/* 判断是否是type命令 */
if (cmdline[0] == 't' && cmdline[1] == 'y' && cmdline[2] == 'p' && cmdline[3] == 'e' && cmdline[4] == ' ')
/* s[0~10]用空格填充,用于存放文件名 */
for (y = 0; y < 11; y++) {
s[y] = ' ';
}
y = 0;
/* 读取cmdline[5~] 复制到 s[0~] */
for (x = 5; y < 11 && cmdline[x] != 0; x++) {
/* 遇到“.”接下来就是扩展名 */
if (cmdline[x] == '.' && y <= 8) {
y = 8;
} else