浙江工业大学模拟UNIX系统实验
操作系统模拟unix文件系统实验报告

操作系统大型实验班级:学号:姓名:一实验介绍……………………………………………………………………1.实验名称2.实验目的3.实验内容及要求二实验环境……………………………………………………………………三实验设计……………………………………………………………………1.数据结构设计2.系统流程设计3.实现命令操作四模块详解……………………………………………………………………1 .文件操作2 .用户操作五实验演示……………………………………………………………………1 .初始化磁盘块2 .用户登录3 .目录操作4 .文件操作六源代码………………………………………………………………………七实验心得体会……………………………………………………………………1.调试中遇到的问题总结2.实验感悟一、实验介绍1.实验名称操作系统大型实验2.实验目的完成一个 UNIX/Linux文件系统的子集的模拟实现,了解Unix文件系统的实现机制。
3.实验内容及要求(1)文件卷结构设计0#块可省略I节点栈及空间为20项块大小为512字节卷盘块数大于100I节点盘块数大于10块(2)I节点结构设计文件大小文件联接计数文件地址文件拥有者文件所属组文件权限及类别文件最后修改时间其中文件地址为六项:四个直接块号,一个一次间址,一个两次间址(3)目录结构用16字节表示,其中14字节为文件名,2字节为I节点号(4)用户及组结构用户信息中包括用户名、口令,所属组,用户打开文件表(5)文件树结构除(4)要求外,适当考虑UNIX本身文件树结构(6)实现功能Ls 显示文件目录Chmod 改变文件权限Chown 改变文件拥有者Chgrp 改变文件所属组Pwd 显示当前目录Cd 改变当前目录Mkdir 创建子目录Rmdir 删除子目录Mv 改变文件名Cp 文件拷贝Rm 文件删除Ln 建立文件联接Cat 连接显示文件内容Vi 文件写入Mk 创建文件umask 查看用户屏蔽码Umask 文件创建屏蔽码Passwd 修改用户口令Ls-l 查看文件类型Login 用户注销Logout 退出系统Help 显示帮助信息二、实验环境实验设备:Microsoft Visual Studio 2010开发语言:c++三、实验设计1.数据结构设计磁盘文件结构设计:用一个名为disk.txt的文件模拟Unix系统磁盘,总共分为200块,每块514个字节(实际可用512个字节,还有2个字节是磁盘分割符‘\n’),使第一块(0#)盘块做为超级块,记录该系统磁盘的使用情况;第二块(1#)盘块——第十三块(12#)盘块作为存储I 结点使用,每个I结点74个字节,所以每个盘块可以存放6个I结点,总共有72个I结点,记录在超级块中;十三块(12#)以后的盘块作为存储文件内容使用,总共187个盘块,用成组连接法记录在超级块中。
浙江工业大学 嵌入式系统原理 实验7

嵌入式系统实验77.1#include "Config.h"#include "Target.h"#define LED (1 << 7) /* P0.7引脚控制LED,低电平点亮*//***************************************************************************** 函数名称:main()* 函数功能:通过查询定时器0中断标志位控制LED点亮****************************************************************************/int main(void){PINSEL0 = 0x00000000; // 设置管脚连接GPIOIO0DIR = LED; // 设置LED控制口输出T0TC = 0; // 定时器0初始化T0PR = 99; // 设置定时器0分频为100分频,得120000HzT0MCR = 0x03; // 匹配通道0匹配中断并复位T0TCT0MR0 = 60024; // 比较值(0.5s定时值)T0TCR = 0x03; // 启动并复位T0TCT0TCR = 0x01;while (1){while ((T0IR & 0x01) == 0); // 等待定时时间到T0IR = 0x01; // 清除中断标志if ((IO0SET & LED) == 0) // 取反LED状态IO0SET = LED;elseIO0CLR = LED;}}7.2#include "Config.h"#include "Target.h"#define LED2 (1 << 7) /* P0.7引脚控制LED2,低电平点亮*//************************************************************************************* ** 函数名称:IRQ_Timer0()** 函数功能:定时器0中断服务程序,取反LED2控制口。
unix实验报告

unix实验报告《Unix实验报告》摘要:本实验报告旨在介绍Unix操作系统的基本概念、特点和使用方法。
通过实际操作和案例分析,展示了Unix操作系统的强大功能和灵活性,以及其在计算机科学和工程领域的重要性。
1. 引言Unix操作系统是一种多用户、多任务的操作系统,具有稳定性高、安全性强、灵活性大等特点。
它被广泛应用于服务器、工作站和个人电脑等领域,为用户提供了丰富的命令行工具和强大的脚本编程环境。
2. Unix操作系统的基本概念Unix操作系统的基本概念包括文件系统、进程管理、用户管理、权限控制等。
文件系统是Unix操作系统的核心,它采用树状结构组织文件和目录,并提供了丰富的文件操作命令。
进程管理是Unix操作系统的另一个重要特点,它允许多个进程同时运行,并提供了进程控制、调度和通信的功能。
用户管理和权限控制则是Unix操作系统的安全保障,它允许管理员对用户和文件进行灵活的管理和权限设置。
3. Unix操作系统的特点Unix操作系统具有很多特点,如多用户、多任务、多线程、分时共享、高性能等。
它采用了模块化设计和分层结构,使得系统更加稳定和可靠。
此外,Unix 操作系统还提供了丰富的命令行工具和编程环境,为用户提供了强大的自定义和扩展能力。
4. Unix操作系统的使用方法Unix操作系统的使用方法主要包括命令行操作、脚本编程、系统管理等。
通过实际操作和案例分析,我们可以了解到如何使用Unix操作系统进行文件操作、进程管理、用户管理、权限控制等。
同时,我们还可以学习到如何使用Shell脚本进行自动化任务的编写和执行,以及如何进行系统管理和性能调优。
5. 结论Unix操作系统是一种强大而灵活的操作系统,它为用户提供了丰富的命令行工具和编程环境,同时具有稳定性高、安全性强、灵活性大等特点。
通过实际操作和案例分析,我们可以更加深入地了解Unix操作系统的基本概念、特点和使用方法,从而更好地应用它来解决实际问题。
30天自制操作系统期末实验报告

浙江工业大学计算机学院计算机实验班1101 章鹏0329实验报告名称:创新实践(30天自制操作系统)实验目标:根据教材从零开始使用C与汇编语言编写一个简单的操作系统,实现操作系统的基本功能。
实验背景:为了让学生对操作系统的底层有更清晰的了解,选取了一本名为《30天自制操作系统》的书作为两学期创新实践课程的教材,并根据该教材一步步从零开始完成每个人自己特色的简易版操作系统,锻炼学生动手能力,提高学生对操作系统的知识理解。
实验进度:第28天成果界面截图:截图1:操作系统初始化界面截图2:运行命令获取操作系统基本信息截图Mem:读取系统内存与存储空间截图Dir:读取当前系统允许使用的应用程序截图Exit:关闭当前console命令窗截图应用程序名:在当前窗口下运行应用程序截图Start+应用程序名:新建一个console命令窗并运行程序截图Ncst(no console start):无新建窗口运行程序截图Shift+f2:新建一个空的console窗口截图F11:将下一层的console窗口切至最顶层截图Tab:将当前工作区间(键盘)在窗口间循环截图3应用程序截图:截图a(显示字符A):截图Winhelo/winhelo2/winhelo3:截图Color:截图Color2:截图Hello3:截图Hello4与hello5:截图Lines:画线程序截图Noddle:计时程序(三分钟)截图Sosu:显示1-1000内的素数截图Sosu3:显示1-10000内的素数截图Star1:显示一个点截图Stars:显示多个点截图Walk:使用方向键控制点的移动源代码截取:操作系统代码:haribote文件夹(以graphic界面颜色与图形控制为例){mouse[y * 16 + x] = bc;}}}return;}void putblock8_8(char *vram, int vxsize, int pxsize,int pysize, int px0, int py0, char *buf, int bxsize){int x, y;for (y = 0; y < pysize; y++) {for (x = 0; x < pxsize; x++) {vram[(py0 + y) * vxsize + (px0 + x)] = buf[y * bxsize + x];}}return;}操作系统api(以api002’输出单个字符’为例):ext]_api_putstr0: ; void api_putstr0(char *s);PUSH EBXMOV EDX,2MOV EBX,[ESP+8] ; sINT 0x40POP EBXRET应用程序(以stars为例):/z_tools/INCPATH = ../z_tools/haribote/MAKE = $(TOOLPATH) -rEDIMG = $(TOOLPATH)IMGTOL = $(TOOLPATH)COPY = copyDEL = deldefault :$(MAKE): haribote/ haribote/ Makefile \a/ hello3/ hello4/ hello5/ \winhelo/ winhelo2/ winhelo3/ \star1/ stars/ stars2/ \lines/ walk/ noodle/ \beepdown/ color/ color2/$(EDIMG) imgin:../z_tools/ \wbinimg src:haribote/ len:512 from:0 to:0 \copy from:haribote/ to:@: \copy from:haribote/ to:@:\copy from: to:@:\copy from:a/ to:@:\copy from:hello3/ to:@: \copy from:hello4/ to:@: \copy from:hello5/ to:@: \copy from:winhelo/ to:@:\copy from:winhelo2/ to:@:\copy from:winhelo3/ to:@:\copy from:star1/ to:@:\copy from:stars/ to:@:\copy from:stars2/ to:@:\copy from:lines/ to:@:\copy from:walk/ to:@:\copy from:noodle/ to:@:\copy from:beepdown/ to:@:\copy from:color/ to:@:\copy from:color2/ to:@:\imgout:run :$(MAKE)$(COPY) ..\z_tools\qemu\$(MAKE) -C ../z_tools/qemuinstall :$(MAKE)$(IMGTOL) w a:full :$(MAKE) -C haribote$(MAKE) -C apilib$(MAKE) -C a$(MAKE) -C hello3$(MAKE) -C hello4$(MAKE) -C hello5$(MAKE) -C winhelo$(MAKE) -C winhelo2$(MAKE) -C winhelo3$(MAKE) -C star1$(MAKE) -C stars$(MAKE) -C stars2$(MAKE) -C lines$(MAKE) -C walk$(MAKE) -C noodle$(MAKE) -C beepdown$(MAKE) -C color$(MAKE) -C color2$(MAKE)run_full :$(MAKE) full$(COPY) ..\z_tools\qemu\$(MAKE) -C ../z_tools/qemuinstall_full :$(MAKE) full$(IMGTOL) w a:run_os :$(MAKE) -C haribote$(MAKE) runclean :src_only :$(MAKE) clean-$(DEL)clean_full :$(MAKE) -C haribote clean$(MAKE) -C apilib clean$(MAKE) -C a clean$(MAKE) -C hello3 clean$(MAKE) -C hello4 clean$(MAKE) -C hello5 clean$(MAKE) -C winhelo clean$(MAKE) -C winhelo2 clean$(MAKE) -C winhelo3 clean$(MAKE) -C star1 clean$(MAKE) -C stars clean$(MAKE) -C stars2 clean$(MAKE) -C lines clean$(MAKE) -C walk clean$(MAKE) -C noodle clean$(MAKE) -C beepdown clean$(MAKE) -C color clean$(MAKE) -C color2 cleansrc_only_full :$(MAKE) -C haribote src_only$(MAKE) -C apilib src_only$(MAKE) -C a src_only$(MAKE) -C hello3 src_only$(MAKE) -C hello4 src_only$(MAKE) -C hello5 src_only$(MAKE) -C winhelo src_only$(MAKE) -C winhelo2 src_only$(MAKE) -C winhelo3 src_only$(MAKE) -C star1 src_only$(MAKE) -C stars src_only$(MAKE) -C stars2 src_only$(MAKE) -C lines src_only$(MAKE) -C walk src_only$(MAKE) -C noodle src_only$(MAKE) -C beepdown src_only$(MAKE) -C color src_only$(MAKE) -C color2 src_only-$(DEL)refresh :$(MAKE) full$(MAKE) clean_full-$(DEL)。
浙工大-嵌入式实验报告

金艳霞通信2班201203110210实验五Linux交叉编译平台一、实验目的1.掌握一些基本的linux读写操作2.利用vcc编译c程序3.通过nfs挂载到实验箱中,利用交叉编译执行文件二.实验设备1.Arm9试验箱2.Pc机3.Linux系统服务器三.实验过程及实验结果1.连接电脑箱2.设置交叉编译环境启动putty.exe登陆192.168.1.1163.添加软件包至实验目录:①[shiyan@localhost ~]$ cd /home/shiyan②[shiyan@localhost ~]$ tar –zxvf arm-linux-gcc-3.4.4-glib-2.3.5-static.tar.gztar -zxvf arm-linux-gcc-3.4.4-glib-2.3.5-static.tar.gz③[shiyan@localhost201203110210]$exportPATH=$PATH:/home/shiyan/201203110210/opt/crosstool/arm-linux/gcc-3.4.4-glib-2.3.5/arm-linux/bin④[shiyan@localhost 201203110210]$ setOSTYPE=linux-gnuPATH=/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/shiya n/bin:/home/shiyan/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/bin:/ho me/shiyan/opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/bin:/home/shiyan /opt/crosstool/arm-linux/gcc-3.4.4-glibc-2.3.5/arm-linux/bin可以看出路径已添加⑤[shiyan@localhost 201203110210]$ arm-linux-g再按tabarm-linux-g++ arm-linux-gcc arm-linux-gcc-3.4.4 arm-linux-gccbug arm-linux-gcov⑥[shiyan@localhost 201203110210]$ arm-linux-gccarm-linux-gcc: no input files此时出错,无此文件3.测试程序①创建hello.c[shiyan@localhost ~]$ vi hello.c#include<stdio.h>int main(){printf("jin123");return 0;}:wq②查看是否生成文件[shiyan@matrix 201203110210]$ lsarm-linux-gcc-3.4.4-glib-2.3.5-static.tar.gz hello.c已经生成③打开hello.c[shiyan@localhost ~]$ ./hello.c-bash:/hello cannot execute binary file表示无法在服务器上执行④交叉编译hello.c[shiyan@localhost ~]$ arm-linux-gcc -o hello hello.c⑤将文件拷贝到nfs下[shiyan@localhost ~]$ cp hello /home/shiyan/nfs⑥挂载服务器到板子上/ $ mount –tnfs -o nolock 192.168.1.116:/home/shiyan/nfs/mnt/nfs/ $cdmnt/nfs⑦打开hello文件/ $./hello结果输出:Jin 123四.实验总结上述实验可以得出,交叉编译的二进制可以在板子上运行,却不能在服务器上运行,很好的认清了交叉编译的意义和功能。
模拟UNIX文件系统

模拟UNIX/Linux文件系统
(3)目录结构 • 用16字节表示,其中14字节为文件名,2字节为I节点号 (4)用户及组结构 • 用户信息中包括用户名、口令,所属组,用户打开文件表 • (文件树结构应与用户相对应:有每个用户的HOME目录) • 组信息中可只包含组名
(5)文件树结构 除(4)要求外,适当考虑UNIX/Linux本身文件树结构
1. 检查超级块上锁否。
2. 检查i结点编号栈满否。 3. 若i结点编号栈未满,便将回收的i结点的编 号进栈,并使当前空闲i结点数加1。 4. 置超级块修改标志后返回。
超级块
512字节/块
0#块(第一个512字节)
根目录文件
.
.. bin usr dev
1#块(第二个512字节) 每个inode 占32字节 …21#...
模拟UNIX/Linux文件系统
(6)实现功能 • Ls 显示文件目录 • Chmod 改变文件权限 • Chown 改变文件拥有者 • Chgrp 改变文件所属组 • Pwd 显示当前目录 • Cd 改变当前目录 • Mkdir 创建子目录 • Rmdir 删除子目录 • Umask 文件创建屏蔽码 • Mv 改变文件名 • Cp 文件拷贝 • Rm 文件删除 • Ln 建立文件联接 • Cat 连接显示文件内容 • Passwd 修改用户口令
分配过程如下:
1. 检查超级块ห้องสมุดไป่ตู้锁否。
2. 检查i结点栈空否。 3. 从空闲i结点编号栈中分配一个i结点,并且加 以初始化,填写有关文件的属性。 4. 分配内存i结点。创建新文件后,随即把它打 开。调用iget过程为之分配内存i结点。 5. 将磁盘i结点总数减1,并在置超级块的修改标 志后返回。
unix体系编程实验报告华北电力大学

华北电力大学实验报告||实验名称《UNIX/LINUX体系及编程》课程实验课程名称UNIX/LINUX体系及编程||专业班级:学生姓名:学号:成绩:指导教师:阎蕾实验日期:2014.11UNIX/LINUX体系及编程》课程实验任务书一、目的与要求1.掌握UNIX/Linux系统的目录和文件管理命令。
2.掌握shell的输入输出重定向,编写shell脚本文件。
3.编写C语言程序,使用GCC编译,使用GDB调试。
4.掌握make工具,撰写makefile文件,完成C程序的自动编译。
5.要求每人能独立完成实验。
二、主要内容1.用pwd命令显示用户主目录的路径名,用date命令查看当前日期和时间,用who命令查看当前登录在系统中的用户列表,利用who命令选项查看当前系统中的用户总数和系统启动时间。
比较whoami 和who am i显示的结果区别。
2.用vi编辑器,先在用户主目录中创建文件,编辑文件。
并作统计文件大小,重新编辑文件。
字符串替换等工作3.用find命令查找名为passwd的文件。
从用户主目录开始,查找所有1天前创建的文件。
查找文件属主的文件。
查找1天前被访问过的文件。
4.用重定向符和cat命令创建一个flower脚本文件,完成如下功能。
4.1 显示用户名。
显示用户当前系统中的进程。
4. 2 判断当前用户是否为root用户:若是root用户,则根据命令行参数n,清除/var/log目录下的某个文件的内容但保留其最后的n行的内容,若没有参数,则保留10行;若不是root用户,提示出错。
5.编写C程序,编译、运行、调试程序。
用c语言程序编程实现:将输入的十进制数输出为相应的十六进制数。
并撰写makefile,使用make工具完成自动编译。
三、进度计划四、实验成果要求1.将操作截图贴报告中,包括命令、脚本、C代码、makefile文件内容及运行结果。
五、考核方式1.以实验报告作为实验成绩。
学生姓名:指导教师:阎蕾2014年9月9日一、实验目的及要求6.掌握UNIX/Linux系统的目录和文件管理命令。
unix实验报告

unix实验报告Unix实验报告引言Unix操作系统是一种广泛应用于计算机领域的操作系统,具有稳定性、可靠性和灵活性等优势。
本实验旨在探索Unix操作系统的基本特性和功能,以及如何在Unix环境下进行常见的操作和任务。
一、Unix操作系统的概述Unix操作系统诞生于20世纪70年代,由贝尔实验室的Ken Thompson和Dennis Ritchie等人开发。
它采用了分时操作系统的设计理念,支持多用户、多任务和多进程的运行环境。
Unix操作系统以其开放源代码和良好的可移植性,成为了众多计算机系统的首选操作系统。
二、Unix系统的基本命令和操作在Unix系统中,用户可以通过命令行界面或图形界面来操作系统。
本节将介绍一些常见的Unix命令和操作。
1. 文件和目录管理Unix系统以文件和目录的形式来组织和管理数据。
用户可以使用命令如ls、cd、mkdir等来查看、切换目录以及创建新的目录。
2. 文件编辑和查看Unix系统提供了强大的文本编辑工具,如vi和nano。
用户可以使用这些工具来编辑和查看文本文件,进行代码编写和修改。
3. 进程管理Unix系统支持多进程的运行环境,用户可以使用命令如ps、kill等来查看和管理系统中的进程。
这些命令可以帮助用户了解系统的运行情况,并进行必要的进程控制和管理。
4. 网络和通信Unix系统具有强大的网络和通信功能。
用户可以使用命令如ping、ssh等来测试网络连接和进行远程登录。
此外,Unix系统还支持各种网络协议和服务,如FTP、HTTP等。
三、Unix环境下的编程和开发Unix操作系统以其开放的设计理念,成为了许多程序员和开发者的首选平台。
本节将介绍Unix环境下的编程和开发工具。
1. C语言开发Unix操作系统的内核和许多系统工具都是使用C语言编写的。
因此,C语言成为了Unix环境下最常用的编程语言之一。
开发者可以使用Unix系统提供的gcc 编译器来编译和调试C语言程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模拟 Unix 文件系统
软件工程(2+2)2 班 201326740214 唐高望 201326740226 殷烨露 201326740220 项耀军
一、 实验要求
1.设计和实现一个简单的文件系统,要求包括目录、普通文件和文件的存 储
2.文件系统的目录结构采用类似 Linux 的树状结构; 3.要求模拟的操作包括:
if(i < InputName.length()){ //不再当前目录下创建;//截断路径 int LastF; for(LastF = (InputName.length() - 1);InputName[LastF] !=
F;LastF--); char Path[50]; Path[LastF] = '$'; for(int j = 0;j<LastF;j++){ Path[j] = InputName[j]; } _NowDirID = FindPath(_NowDirID,Path); if( _NowDirID == 0) return false;
//检测是否有重名 for(int CurID = fcb[dFilePid].sID ; CurID != -1 ; CurID = fcb[CurID].nID ){
if(fcb[CurID].F == 2 && fcb[CurID].Name == InputName){ cout<<"目的目录下有同名文件,操作失败...\n"; return false;
string RemName = ""; for(LastF++; LastF < InputName.length() ;LastF++){
}else{ break;
} if(Index[3][IndexID] != -1){
//使用了间接索引; IndexID = Index[3][IndexID]; BlockID = Index[1][IndexID]; WriteBitMap( 0 ,BlockID); Index[0][IndexID] = 0; }else{ break; } } SaveIndexAndBitmap(); } //相邻目录或文件建立连接 int pDironePointDirID = fcb[_FileIDpID].sID; int pDirtwoPointDirID = fcb[pDironePointDirID].nID; int CurID = pDirtwoPointDirID; for(; fcb[CurID].nID != FileID ;CurID = fcb[CurID].nID); fcb[CurID].nID = fcb[FileID].nID; fcb[FileID].F = 0; }
string InputName; cin>>InputName; char F = '\\';
//检测输入是否正确 if(InputName[InputName.length()-1] == F){
cout<<"给出的文件名有误..."<<endl; return false; }
//检测是否在当前目录下创建 int i; for(i = 0;i < InputName.length() && InputName[i] != F;i++);
return true; } bool mvDir(int _NowDirID){
int sDirPid; intFindDirID(_NowDirID); if( sID == -1) return false; int onepointDirID = fcb[sID].sID; int twopointDirID = fcb[onepointDirID].nID; sDirPid = fcb[twopointDirID].sID;
int RmEmptyDir(int DirID){ //删除空目录,返回父目录; fcb[DirID].F = 0; int onePointDirID = fcb[DirID].sID; fcb[onePointDirID].F = 0; int twoPointDirID = fcb[onePointDirID].nID; fcb[twoPointDirID].F = 0; int ReturnID = fcb[twoPointDirID].sID;
string RemName = ""; for(LastF++; LastF < InputName.length() ;LastF++){
RemName = RemName + InputName[LastF]; } InputName = RemName; }
dFilePid = _NowDirID;
(512B)包含 32 个目录项。在目录项中,第 1、2 字节为相应文件的外存 i 节点号,
是该文件的内部标识;后 14B 为文件名,是该文件的外部标识。所以,文件目
录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存 i 节点号,
由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX 的存
string InputName; cin>>InputName; char F = '\\';
//检测输入是否正确 if(InputName[InputName.length()-1] == F){
cout<<"给出的目录名有误..."<<endl; return false; }
//检测是否在当前目录下创建 int i; for(i = 0;i < InputName.length() && InputName[i] != F;i++);
}
void RmFile(int FileID,int _FileIDpID){
//删除文件
if(fcb[FileID].sID != -1){
//释放索引表
int IndexID;
int BlockID;
IndexID = fcb[FileID].sID;
BlockID = Index[1][IndexID];
a) 目录的添加、删除、重命名; b) 目录的显示(列表) c) 文件的添加、删除、重命名 d) 文件和目录的拷贝 4.用户进入时显示可用命令列表;用户输入 help 时显示所有命令的帮助文 档; 输入某个命令--?(或者—help)时显示该条命令的使用说明 5.用户输入 exit 时退出该系统 6.实验实现基于 linux 平台; 7.实验开发语言可以选用 C/C++
四、 部分源代码
bool RemoveFile(int _NowDirID){ int FileIDpID; int FileID = FindFileID(_NowDirID,&FileIDpID); if(FileID == -1){ cout<<"文件名有误,操作失败...\n"; return false; } RmFile(FileID,FileIDpID); SaveFCB(); return true;
WriteBitMap( 0 ,BlockID);
//
释放文件块;
Index[0][IndexID] = 0;
//
释放索引表;
while(1){
if(Index[2][IndexID] != -1){ BlockID = Index[2][IndexID]; WriteBitMap( 0 ,BlockID);
} }
fcb[sID].Name = InputName; fcb[sID].nID = -1;
//检测是否在相同目录下 if(sFilePid != dFilePid){
int CurID = fcb[dFilePid].sID; while(fcb[CurID].nID != -1) CurID = fcb[CurID].nID;
储介质以 512B 为单位划分为块,从 0 开始直到最大容量并顺序加以编号就成了
一个文件卷,也叫文件系统。UNIX 中的文件系统磁盘存储区分配图如下:
0#
1#
2#
…
K# K+1# K+2# K+3# …
n#
引导区 管理区
i 节点区
文件存储区
本次实验设计是要实现一个简单的模拟 UNIX 文件系统。我们在磁盘中申请 一个二进制文件模拟 UNIX 内存,依次初始化建立位示图区,I 节点区,数据块 区。并给已打开的文件建立文件打开表。
命令定义如下
ls pwd cd mkdir rmdir mv cp rm passwd
显示文件目录 显示当前目录 改变当前目录 创建子目录 删除子目录 改变文件名 文件拷贝 文件删除 修改用户口令
二、 实验原理
UNIX 采用树型目录结构,每个目录表称为一个目录文件。
一个目录文件是由目录项组成的。每个目录项包含 16B,一个辅存磁盘块
//相邻目录或文件建立连接 int pDironePointDirID = fcb[ReturnID].sID; int pDirtwoPointDirID = fcb[pDironePointDirID].nID; int CurID = pDirtwoPointDirID; for(; fcb[CurID].nID != DirID ;CurID = fcb[CurID].nID); fcb[CurID].nID = fcb[DirID].nID; return ReturnID; }