if(record!=-1) { row=(pos+1)/20; column=(pos+1)%20-1; for(int j=0;j<F[record].size;j++) //清空磁盘 { Disk.filedata[row][column++] = NULL; if(column==20) { column=0; row++; } } Node* current = freeList; Node* recordNode = current; int count = 0;
时间: 2023-12-08 10:05:18 浏览: 129
libqtredis2018-11-9.rar_QT_additional9g1_libqtredis_libqtredis20
这段代码实现了清空磁盘上被删除文件占用的空间。首先判断是否找到了要删除的文件,如果找到了,则计算文件的位置,即行数和列数。然后,使用一个嵌套的循环将该文件占用的磁盘空间逐个清空。在清空过程中,将变量 `row` 和 `column` 分别加 1,表示清空下一个字符的位置。
接下来,定义了两个指针变量 `current` 和 `recordNode`,分别指向空闲链表的头节点和记录位置的节点。同时,定义了一个计数器变量 `count`,用于记录当前连续空闲块的大小。
接着,使用一个循环遍历空闲链表,并记录当前可用的连续空间的大小到变量 `count` 中。如果 `count` 等于文件大小,说明找到了足够的连续空间,记录下位置并退出循环。
如果当前空闲块和下一个空闲块是连续的,则将 `count` 加 1。如果不连续,则将 `count` 重置为 1,并记录当前位置到 `recordNode` 中。
最后,将指向空闲链表的节点 `recordNode` 的 `next` 成员指向当前节点的 `next` 成员,从而删除已经被占用的空闲块。同时,将文件的大小记录到 `count` 变量中,表示释放了多少个连续空闲块。如果释放的空闲块大小不为 0,则将其添加到空闲链表中。
阅读全文