void my_ls(){ int blocknum = presentFCB.base;//获得当前fcb所在的盘块号 lslink *FCBlisthead,*temp; FCBList FL,*Fnode; FCBlisthead = &(FL.link); unsigned short date; unsigned short time; printf("directory %s\n",pwd); printf("%-12s %-10s %-20s %-6s\n","name","type","time","length(bytes)"); getFCBList(blocknum,FL,FCBlisthead); list_for_each(temp,FCBlisthead){ Fnode = list_entry(temp,FCBList,link); date = Fnode->fcb_entry.date; time = Fnode->fcb_entry.time; printf("%-12s %-10s %4d/%02d/%02d %02d:%02d:%02d %-6d\n",Fnode->fcb_entry.name, type[Fnode->fcb_entry.type],getYear(date),getMonth(date),getDay(date), getHour(date,time),getMinute(time),getSecond(time),Fnode->fcb_entry.length); } }
时间: 2024-03-29 18:38:30 浏览: 132
这段代码是用来实现类似于 Linux 系统中的 ls 命令的功能,它会列出当前目录下的所有文件和子目录的名称、类型、创建时间和大小。具体的实现方式是通过读取当前目录所在的磁盘块,获取其中的所有 FCB(文件控制块),然后逐个输出每个 FCB 中记录的文件信息。其中,使用了链表来保存所有的 FCB,通过遍历链表来依次输出每个文件的信息。
相关问题
#define blocknum 8000 //磁盘物理块个数 #define direct_index_num 10 //直接地
知识是人类思考和理解世界的工具。拥有知识可以帮助我们更好地认识和应对生活中的各种问题和挑战。知识可以分为各种类型,例如科学知识、文化知识、历史知识等。通过学习不同的知识领域,可以使人们拥有更宽广的视野和思维方式。
首先,知识可以提供人们解决问题的方法和策略。当我们面临困难和挑战时,具备相关知识的人可以更快地找到解决问题的办法。比如,在科学知识的帮助下,我们可以了解自然界的规律,从而找到解决环保问题的方法;在历史知识的指导下,我们可以学习过去的经验,避免重蹈覆辙。
其次,知识还可以培养人们的思维能力和创造力。通过学习知识,我们可以锻炼我们的观察、分析和推理能力,培养我们的逻辑思维和创造性思维。这使得我们在面对新问题时能够更好地思考和提出创新的解决方案。
此外,知识还可以丰富人们的生活并促进个人成长。通过了解不同领域的知识,我们可以拓宽自己的兴趣爱好,并开拓自己的人生经验。比如,学习文化知识可以帮助我们更好地理解和欣赏文学、艺术等领域的作品,提高我们的审美水平。
总而言之,知识是人类进步和发展的源泉。它不仅可以帮助我们解决问题和应对挑战,还可以培养我们的思维能力和创造力,丰富我们的生活并促进个人成长。因此,学习和获取知识对于每个人来说都是非常重要的。
void FIFO() { int i,j; bool find; int point; int temp; // 临时变量 ChangeTimes = 0; for(j=0;j<M;j++) for(i=0;i<N;i++) DataShowEnable[j][i] = false; // 初始化为false,表示没有要显示的数据 for(i=0;i<M;i++) { count[i] = 0; // 大于等于BlockNum,表示块中没有数据,或需被替换掉 // 所以经这样初始化(3 2 1),每次替换>=3的块,替换后计数值置1, // 同时其它的块计数值加1 ,成了(1 3 2 ),见下面先进先出程序段 } for(i=0;i<N;i++) // 对有所数据操作 { // 增加count for(j=0;j<M;j++) count[j]++; find = false; // 表示块中有没有该数据 for(j=0;j<M;j++) { if( Block[j] == Data[i] ) { find = true; } } if( find ) continue; // 块中有该数据,判断下一个数据 // 块中没有该数据 ChangeTimes++; // 缺页次数++ if( (i+1) > M ) // 因为i是从0开始记,而M指的是个数,从1开始,所以i+1 { //获得要替换的块指针 temp = 0; for(j=0;j<M;j++) { if( temp < count[j] ) { temp = count[j]; point = j; // 获得离的最远的指针 } } } else point = i; // 替换 Block[point] = Data[i]; count[point] = 0; // 更新计数值 // 保存要显示的数据 for(j=0;j<M;j++) { DataShow[j][i] = Block[j]; DataShowEnable[i<M?(j<=i?j:i):j][i] = true; // 设置显示数据 } } // 输出信息 cout<< endl; cout<<"FIFO => "<< endl; DataOutput(); }这段代码
这段代码是一个使用 FIFO 算法进行页面置换的函数。它首先对一些变量进行了初始化,包括 count 数组,表示每个块最后一次被访问的时间距离当前时间的间隔,以及 DataShowEnable 数组,表示每个数据是否需要在输出中显示。然后它遍历所有的数据,在每次访问时,它会先将 count 数组中的所有元素加 1,表示时间流逝了一单位。然后它会查找当前数据是否在块中,如果在,就直接跳到下一个数据;否则,就发生了缺页中断,缺页次数加 1。如果当前块中的数据个数小于 M,就直接使用空闲块;否则,就找到 count 数组中值最大的块,也就是最长时间没有被访问的块,将其替换成当前数据。最后,它会将替换后的块保存到 Block 数组中,并将需要显示的数据保存到 DataShow 和 DataShowEnable 数组中。最终,它会输出统计信息,包括缺页次数和缺页率,以及页面置换后的数据。
阅读全文