嗨伙计们有问题,希望你帮我解决这个问题。我有一个关于为我的操作系统制作一个简单的胖系统的功课。我最后有我的代码。我正在我的floopy_0上写一些字符串,我正在读它但是怎么能编辑或制作它呢?我不知道。 ı必读后才能读取我的软盘中的脂肪系统。因此,我必须在floopy上访问我的readed fat文件,或者在屏幕上进行比较或显示。 这个怎么运作: 在表标签ı有我的cripted数据和前7个字节是我的程序名称, 8是它的种类 - 可以是0或1(asm或txt) 9-10(clinder数量) 11-12(扇区号) 13(头号) 和14-15是大小(它有多少扇区)。例如:
table db "apple 0001002", 0Dh,0Ah
db "orange 0010102", 0Dh,0Ah
db "clean 0020502", 0Dh,0Ah
db "story 0001502", 0
这就是我在我的clinder 1部门1和头部0(我的脂肪在哪里)写的内容。我必须从readed文件中读取clinder扇区和头号,以读取在我的内核中输入的程序 这是我的问题: “怎么可能用它来显示在screan上,以及可以做些什么来选择程序呢? 例如:当老师在我的内核中写“apple”时。它必须启动苹果计划。 ı有程序和ı可以运行它,但我不知道该怎么做后ı读我的脂肪,并在我的程序列表中比较“苹果”。如果它在我的列表中,它可以运行它,但如何检查它在我的列表中???
最大的交易是我必须从我的FLOOPY读取我的胖子我必须检查名字教师我是否已经阅读了FATFİLE?请帮助我怎么做?
答案 0 :(得分:0)
编辑文件是将内容读入内存,在内存中更改内容并将其写回磁盘。
例如,在收到来自其中一个用户应用程序的openFile
系统调用后,您加载该文件,记录它正被应用程序使用(因此没有其他应用程序可以同时使用它) ,创建一个文件信息块,其中包含某些资源标识符(例如文件路径)等数据,是否为读取,写入或追加打开,一个文件指针,保存当前要在文件中访问的内存地址(例如,最初为0,并通过读/写操作向上增长),文件大小和开头的地址内存中的文件。此外,指示内容是否已被修改的标志可能是有用的。完成后,将文件信息数据结构的地址返回给用户应用程序。
然后可以调用应用程序,将指针与其他必要参数readFile
一起传回,以便从文件writeFile
读取给定数量的连续字节,以写入给定的字节数从缓冲区到文件,seekFile
将文件指针设置为文件中的给定偏移量(文件缓冲区中的* N * th字节,即文件的基址)在内存中+ N )和closeFile
单独使用句柄(信息块的地址)将内存中的更改写回磁盘并释放文件,以便其他进程可以使用它
当然有比这更复杂的方法,但这个简单的方法适用于小型系统。
显示数据是另一回事,是另一个模块的责任(实际上甚至不是单个模块,而是其中一些模块)。在这里,事物围绕80x25字符屏幕旋转,从0xB8000(0B800h:0000)开始连续存储区域,每个字符有两个字节:第一个用于ASCII字符代码本身,第二个用于元属性,如背景颜色,前景颜色,闪烁。字符颜色用4位指定,最高位是'light-flag',其余位分别用于RGB(例如1100b或0Ch是浅红色)。上半字节控制背景颜色,但最高位,而不是'light-flag',是闪烁标志,对于BG,你只能被限制为8颜色。
请记住,您作为内核不是显示文件数据的人。决定如何处理从文件中读取的数据不是您的责任。
用户应用程序可能会调用您的writeLine
系统调用来显示任何字符串 - 这可能是它刚刚要求您提供的文件数据。
稍微偏离主题,但属于上一段是用户输入命令的 shell (或点击其中的窗口和按钮)只是一个利用操作的常规用户应用程序系统功能根据用户要求。