磁盘文件管理模拟程序
会编“磁盘管理模拟程序” 的大哥 帮下忙 磁盘文件管理模拟程序
具体要求如下:
将磁盘定义为一个数组 disk,用内存的一个内存块来表示磁盘,数组大小为:磁盘总扇区数(如100个)* 扇区长度(如512B)。并建立两个链表:(1) 空闲扇区块链表sector,链表结点有三个域:两个域存储空闲扇区块的起始扇区号和终止扇区号,另一个则为指针域,用于连接下一个结点; (2) 磁盘上目前所有文件的文件控制块链表 file: 链表的结点结构如下:
文件名域 文件总长度域 文件内容存储区始址指针域 next
方法说明:
实现文件保存到磁盘和删除的 save_del_file()函数。保存文件先是向磁盘申请空间来做文件控制块结点,并将结点插入到 file 链表中,接着从空闲扇区链表(扇区池 pool )中申请足够的扇区来存储文件内容;被分配的扇区则从空闲扇区链表删除掉,并单独链成文件内容链表,该链表的首元结点的地址存入文件控制块的文件内容存储区始址指针域中;而磁盘文件的删除操作过程正相反,回收存储被删除文件内容的扇区、并插入到空闲扇区链表(扇区池 pool) 中;再从 file 链表中被删除文件的文件控制块结点及释放所占用的磁盘空间;
文件碎块调整 together ()函数。文件内容读写多次后,文件被分布在几个分散的扇区中存储,而使文件的存取速度变慢,这就是所谓的文件碎块。 together() 函数的功能为: 将同属于一个文件的内容尽量移到连续的空间扇区块中;若无足够大的连续空闲扇区块满足要求,则需要先移动其他文件内容,进行磁盘空间整理,以能找到足够大的扇区块来存储所要存储的文件。